Wie kann ich die erste Zeile einer Textdatei mit einer Windows-Batchdatei lesen? Da die Datei groß ist, möchte ich mich nur mit der ersten Zeile befassen.
Im Folgenden finden Sie eine allgemeine Stapelverarbeitungsdatei zum Drucken der obersten n
-Zeilen aus einer Datei wie dem Dienstprogramm GNU head
anstelle einer einzelnen Zeile.
@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
Zum Beispiel:
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
Leere Zeilen werden derzeit nicht gezählt. Es unterliegt außerdem der Beschränkung der Stapeldatei-Zeilenlänge von 8 KB.
das ist viel einfacher
set /p texte=< file.txt
echo %texte%
Uh ihr Jungs ...
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:\>
Sie könnten es versuchen:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
edit Oder sagen Sie, Sie haben vier Datenspalten und möchten von der 5. Zeile bis zum Ende Folgendes versuchen:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
Dank thetalkingwalnut mit answer Windows Batchbefehlen, um die erste Zeile aus der Textdatei zu lesen, habe ich folgende Lösung gefunden:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Ein Liner, nützlich für stdout-Weiterleitung mit ">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
Bauen Sie leicht auf den Antworten anderer Menschen auf. Jetzt können Sie die Datei angeben, aus der Sie lesen möchten, und die Variable, in die das Ergebnis eingefügt werden soll:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
Das bedeutet, dass Sie das Obige so verwenden können (vorausgesetzt, Sie haben es getline.bat genannt).
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
Versuche dies
@echo off
setlocal enableextensions enabledelayedexpansion
set firstLine=1
for /f "delims=" %%i in (yourfilename.txt) do (
if !firstLine!==1 echo %%i
set firstLine=0
)
endlocal
Das Problem mit den EXIT /B
-Lösungen besteht darin, dass die Batch-Datei realistischer als nur ein Teil davon ist. Es gibt keine nachfolgende Verarbeitung innerhalb der genannten Batchdatei nach dem EXIT /B
. Normalerweise gibt es für Chargen viel mehr als nur eine einzige Aufgabe.
Um diesem Problem zu begegnen:
@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
(Die sogenannten Giftzeichen sind jedoch immer noch ein Problem.)
Mehr zum Thema, eine bestimmte Zeile mit Batchbefehlen zu erhalten:
Wie bekomme ich die n'te, erste und letzte Zeile einer Textdatei? " http://www.netikka.net/tsneti/info/tscmd023.htm
[Hinzugefügt am 28.08.2012] Man kann auch haben:
@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
Hier ist eine Problemumgehung mit powershell
:
powershell (Get-Content file.txt)[0]
(Sie können auch einen Zeilenbereich mit powershell (Get-Content file.txt)[0..3]
lesen.)
Wenn Sie eine Variable in einem Batch-Skript als erste Zeile von file.txt
festlegen müssen, können Sie Folgendes verwenden:
for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")
Beachten Sie, dass die Batch-Datei-Ansätze auf die Zeilengrenze für den DOS-Befehlsprozessor beschränkt sind - siehe Was ist die Befehlszeilenlänge? .
Wenn Sie also versuchen, eine Datei mit mehr als 8192 Zeichen zu verarbeiten, überspringt das Skript diese einfach, da der Wert nicht gespeichert werden kann.
So erstellen Sie eine Datei (file1.txt
, file1[1].txt
, file1[2].txt
usw.):
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%
Und es läuft.
Ein anderer Weg
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))