Windows-Batch-Befehl (e) erste Zeile von Textdatei lesen
-
02-07-2019 - |
Frage
Wie kann ich die erste Zeile aus einer Textdatei mit einer Windows-Batch-Datei lesen? Da die Datei groß ist, möchte ich nur mit der ersten Zeile behandeln.
Lösung
Hier ist eine Allzweck-Batch-Datei, die die Top-n
Zeilen aus einer Datei wie der GNU head
Dienstprogramm, anstatt nur eine einzige Zeile zu drucken.
@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
Es hat bisher keine Leerzeilen zählen. Es ist auch unter dem Vorbehalt der Batch-Datei Zeilenlängenbeschränkung von 8 KB.
Andere Tipps
uh? imo das ist viel einfacher
set /p texte=< file.txt
echo %texte%
Uh euch ...
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önnen diese einen Versuch geben:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
Bearbeiten Oder sagen Sie vier Spalten mit Daten und wollen aus der 5. Reihe nach unten auf den Boden, versuchen Sie dies:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
Danke mit Antwort Windows-Batch thetalkingwalnut Befehl (e) erste Zeile von Textdatei lesen ich mit folgenden Lösung kam:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Ein wenig aufbauend auf den Antworten von anderen Menschen. Jetzt mit dem Sie die Datei enthält, die von und die Variable, die Sie das Ergebnis wollen lesen möchten setzen in:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
Dies bedeutet, dass Sie die oben wie diese verwenden können (vorausgesetzt, Sie nannten es getline.bat)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
Ein Liner, nützlich für stdout umleiten mit ">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
Versuchen Sie, diese
@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 realistischer in einer Batch-Datei als nur ein Teil davon ist die folgende. Es gibt keine nachfolgende Verarbeitung innerhalb der genannten Batch-Datei nach dem EXIT /B
. Normalerweise gibt es viel mehr zu Chargen als nur eine begrenzte Aufgabe.
, dieses 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
(Aber die so genannte Gift Zeichen werden immer noch ein Problem sein.)
Mehr zum Thema eine bestimmte Zeile mit Batch-Befehlen bekommen:
Wie erhalte ich den n-te, die erste und die letzte Zeile einer Textdatei?“ http://www.netikka.net/tsneti/info/tscmd023.htm
[Hinzugefügt 28-Aug-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 Abhilfe mit powershell
:
powershell (Get-Content file.txt)[0]
(Sie können ganz einfach auch eine Reihe von Linien mit powershell (Get-Content file.txt)[0..3]
lesen)
Wenn Sie eine Variable innerhalb einer Batch-Skript als die erste Zeile von file.txt
setzen Sie verwenden können:
for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")
Beachten Sie, werden die Batch-Datei Ansätze zur Linie Grenze für den DOS-Befehl-Prozessor beschränkt werden - siehe Was die Leitungslänge Limit Befehl? .
Also, wenn versucht, eine Datei zu verarbeiten, die alle Zeilen haben mehr, dass 8192 Zeichen das Skript wird sie einfach überspringen, da der Wert nicht gehalten werden kann.
Eine andere Möglichkeit,
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
Um eine Datei Ciclo (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.