Bir Windows toplu iş dosyası kullanarak bir metin dosyasındaki ilk satırı nasıl okuyabilirim? Dosya büyük olduğu için sadece ilk satırla ilgilenmek istiyorum.
Bir Windows toplu iş dosyası kullanarak bir metin dosyasındaki ilk satırı nasıl okuyabilirim? Dosya büyük olduğu için sadece ilk satırla ilgilenmek istiyorum.
Yanıtlar:
Burada , tek bir satır yerine n
GNU head
yardımcı programı gibi bir dosyadan en üst satırları yazdırmak için genel amaçlı bir toplu iş dosyası var .
@echo off
if [%1] == [] goto usage
if [%2] == [] goto usage
call :print_head %1 %2
goto :eof
REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0
for /f ^"usebackq^ eol^=^
^ delims^=^" %%a in (%2) do (
if "!counter!"=="%1" goto :eof
echo %%a
set /a counter+=1
)
goto :eof
:usage
echo Usage: head.bat COUNT FILENAME
Örneğin:
Z:\>head 1 "test file.c"
; this is line 1
Z:\>head 3 "test file.c"
; this is line 1
this is line 2
line 3 right here
Şu anda boş satırları saymıyor. Ayrıca, 8 KB'lik toplu iş dosyası satır uzunluğu kısıtlamasına da tabidir.
;
, varsayılan FOR / F EOL karakteri olan noktalı virgülle başlayan satırları da yok sayacaktır . 10 satır istenirse, boş olmayan ve başlamayan ilk 10 satırı yazdıracaktır ;
.
uh? imo bu çok daha basit
set /p texte=< file.txt
echo %texte%
Ah siz ...
C:\>findstr /n . c:\boot.ini | findstr ^1:
1:[boot loader]
C:\>findstr /n . c:\boot.ini | findstr ^3:
3:default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
C:\>
findstr "^1:"
ve çift tırnakların sıcaklığını ve korumasını kazanmak için. Ya da benim gibi alıntıları küçümsüyor ve tehlikeli bir şekilde yaşamak istiyorsanız, şunu kullanınfindstr /b 1:
findstr ^^1
.
set /p
Solüsyon çok daha verimli büyük dosyalar içindir.
Bunu bir deneyebilirsiniz:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
düzenleme Veya, diyelim ki dört veri sütununuz var ve 5. satırdan aşağıya doğru, şunu deneyin:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
"delims="
tam klasör adlarını boşluklarla birlikte yazdırmak için eklemem gerekiyordu.
Metin dosyasından ilk satırı okumak için Windows toplu komut (lar) ı yanıtlayan thetalkingwalnut sayesinde aşağıdaki çözümü buldum:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Biraz diğer insanların cevapları üzerine inşa ediliyor. Şimdi okumak istediğiniz dosyayı ve sonucun yerleştirilmesini istediğiniz değişkeni belirlemenize izin verir:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
Bu, yukarıdakileri bu şekilde kullanabileceğiniz anlamına gelir (bunu getline.bat olarak adlandırdığınızı varsayarak)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
(Bir dosya Cicle için file1.txt
, file1[1].txt
, file1[2].txt
vs.):
START/WAIT C:\LAERCIO\DELPHI\CICLADOR\dprCiclador.exe C:\LAERCIUM\Ciclavel.txt
rem set/p ciclo=< C:\LAERCIUM\Ciclavel.txt:
set/p ciclo=< C:\LAERCIUM\Ciclavel.txt
rem echo %ciclo%:
echo %ciclo%
Ve çalışıyor.
set /p
bir komut istemiyle sorar; ancak dosya yeniden yönlendirmesiyle <
, komut isteminde dosyanın içeriğini hemen alır; ve ilk satır bir satır ile bittiği için, bu noktada bilgi istemi okumayı durdurur ve böylece değişkendeki ilk satırı depolar.
EXIT /B
Çözümlerle ilgili sorun , bir toplu iş dosyasının yalnızca bir parçası olarak daha gerçekçi olduğunda aşağıdaki gibidir. Söz konusu toplu iş dosyası içinde EXIT /B
. Genellikle toplu işlerde sınırlı bir görevden çok daha fazlası vardır.
Bu sorunu çözmek için:
@echo off & setlocal enableextensions enabledelayedexpansion
set myfile_=C:\_D\TEST\My test file.txt
set FirstLine=
for /f "delims=" %%i in ('type "%myfile_%"') do (
if not defined FirstLine set FirstLine=%%i)
echo FirstLine=%FirstLine%
endlocal & goto :EOF
(Bununla birlikte, sözde zehirli karakterler hala bir sorun olacaktır.)
Toplu komutlarla belirli bir satırı alma konusunda daha fazla bilgi:
Bir metin dosyasının n'inci, ilk ve son satırını nasıl alırım? " Http://www.netikka.net/tsneti/info/tscmd023.htm
[28 Ağustos 2012 Eklendi] Birinde şunlar da olabilir:
@echo off & setlocal enableextensions
set myfile_=C:\_D\TEST\My test file.txt
for /f "tokens=* delims=" %%a in (
'type "%myfile_%"') do (
set FirstLine=%%a& goto _ExitForLoop)
:_ExitForLoop
echo FirstLine=%FirstLine%
endlocal & goto :EOF
Toplu iş dosyası yaklaşımlarının DOS komut işlemcisi için satır sınırıyla sınırlı olacağını unutmayın - bkz . Komut satırı uzunluk sınırı nedir? .
Dolayısıyla, 8192 karakterden fazla satıra sahip bir dosyayı işlemeye çalışıyorsanız , komut dosyası, değer tutulamayacağı için bunları atlayacaktır.
Diğer yol
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
İşte kullanarak bir geçici çözüm powershell
:
powershell (Get-Content file.txt)[0]
(Bir dizi satırı da kolayca okuyabilirsiniz powershell (Get-Content file.txt)[0..3]
)
Bir toplu iş komut dosyası içinde ilk satırınız olarak bir değişken ayarlamanız gerekiyorsa şunu file.txt
kullanabilirsiniz:
for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")
for /f "delims=" %a in (downing.txt) do echo %a & pause>nul
1. satırı yazdırır, ardından kullanıcının sonraki satırı yazdırmak için bir tuşa basmasını bekler. Gerekli satırları yazdırdıktan sonra durdurmak için Ctrl + C tuşlarına basın.
@Ross Presser: Bu yöntem, başa eklenen satır numaralarını değil, yalnızca satırları yazdırır.