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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top