it-swarm.com.de

Windows-Stapelbefehle zum Lesen der ersten Zeile aus der Textdatei

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.

73
Jesse Vogt

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.

44
indiv

das ist viel einfacher 

  set /p texte=< file.txt  
  echo %texte%
184
Spaceballs

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:\>
17
Amit Naidu

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
)
10
Ross Fuhrman

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
)
5
Jesse Vogt

Ein Liner, nützlich für stdout-Weiterleitung mit ">":

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
3
PabloG

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.
3
Ray Hayes

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
1
Sarath Avanavu

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
1
Timo Salmi

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")
1
mmj

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. 

0
kevinjansz

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.

0
Laercio

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
))
0
hhay