Wie kann ich die erste Zeile aus einer Textdatei mit einer Windows-Batchdatei lesen? Da die Datei groß ist, möchte ich mich nur mit der ersten Zeile befassen.
Wie kann ich die erste Zeile aus einer Textdatei mit einer Windows-Batchdatei lesen? Da die Datei groß ist, möchte ich mich nur mit der ersten Zeile befassen.
Antworten:
Hier ist eine universelle Batch-Datei zum Drucken der obersten n
Zeilen aus einer Datei wie dem GNU- head
Dienstprogramm 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
Beispielsweise:
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
Leerzeilen werden derzeit nicht gezählt. Es unterliegt auch der Beschränkung der Zeilenlänge für Batchdateien von 8 KB.
;
, dem Standardzeichen FOR / F EOL, werden ebenfalls ignoriert . Wenn Sie nach 10 Zeilen fragen, werden die ersten 10 Zeilen gedruckt, die nicht leer sind und nicht mit beginnen ;
.
äh? imo das ist viel einfacher
set /p texte=< file.txt
echo %texte%
Äh ihr ...
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:"
und erhalten Sie die Wärme und den Schutz von doppelten Anführungszeichen. Oder, wenn Sie Zitate wie mich verachten und gefährlich leben wollen, verwenden Siefindstr /b 1:
findstr ^^1
.
set /p
Lösung ist für große Dateien weitaus effizienter.
Sie könnten dies versuchen:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
Bearbeiten Oder sagen Sie, Sie haben vier Datenspalten und möchten von der 5. Zeile bis zum Ende Folgendes:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
"delims="
, um vollständige Ordnernamen zusammen mit Leerzeichen auszudrucken.
Dank thetalkingwalnut mit Windows-Batch- Antwortbefehl (en) zum Lesen der ersten Zeile aus der Textdatei habe ich die folgende Lösung gefunden:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Etwas auf den Antworten anderer Leute aufbauen. 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
)
Dies bedeutet, dass Sie das oben genannte wie folgt 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, wenn sie realistischer in einer Batch-Datei als nur ein Teil davon sind, ist das folgende. Es erfolgt keine nachfolgende Verarbeitung innerhalb der Batch-Datei nach dem EXIT /B
. Normalerweise gibt es bei Chargen viel mehr als nur eine begrenzte Aufgabe.
Um diesem Problem entgegenzuwirken:
@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 Giftcharaktere werden jedoch immer noch ein Problem sein.)
Weitere Informationen zum Abrufen einer bestimmten Zeile mit Batch-Befehlen:
Wie erhalte ich die n-te, die erste und die 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
Um Ciclo 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.
set /p
fragt durch eine Eingabeaufforderung; <
Bei der Dateiumleitung wird der Inhalt der Datei jedoch sofort an der Eingabeaufforderung abgerufen. und da die erste Zeile mit einem Zeilenende endet, hört die Eingabeaufforderung an diesem Punkt auf zu lesen und speichert somit nur die erste Zeile in der Variablen.
Beachten Sie, dass die Ansätze für Batchdateien auf das Zeilenlimit für den DOS-Befehlsprozessor beschränkt sind - siehe Was ist das Limit für 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.
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
))
Hier ist eine Problemumgehung mit powershell
:
powershell (Get-Content file.txt)[0]
(Sie können auch leicht eine Reihe von Zeilen mit lesen powershell (Get-Content file.txt)[0..3]
)
Wenn Sie eine Variable in einem Batch-Skript als erste Zeile festlegen müssen, file.txt
können Sie Folgendes verwenden:
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
Druckt die erste Zeile und wartet darauf, dass der Benutzer eine Taste drückt, um die nächste Zeile zu drucken. Drücken Sie nach dem Drucken der erforderlichen Zeilen Strg + C, um den Vorgang zu beenden.
@ Ross Presser: Diese Methode druckt nur Zeilen, keine Zeilennummern.