Comandi batch di Windows per leggere la prima riga dal file di testo

Come posso leggere la prima riga da un file di testo utilizzando un file batch di Windows? Dato che il file è grande, voglio solo occuparmi della prima linea.

Ecco un file batch generico per stampare le prime n righe da un file come la GNU head utility, invece di una sola riga.

 @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 

Per esempio:

 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 

Al momento non conta le righe vuote. È inoltre sobject alla restrizione della lunghezza della linea del file batch di 8 KB.

uh? questo è molto più semplice

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

Uh ragazzi …

 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:\> 

Potresti fare un tentativo:

 @echo off for /f %%a in (sample.txt) do ( echo %%a exit /b ) 

modifica Oppure, supponiamo di avere quattro colonne di dati e di volerlo dalla quinta riga in basso, prova questo:

 @echo off for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do ( echo %%a %%b %%c %%d ) 

Grazie a thetalkingwalnut con i comandi batch di Windows di risposta per leggere la prima riga dal file di testo, ho trovato la seguente soluzione:

 @echo off for /f "delims=" %%a in ('type sample.txt') do ( echo %%a exit /b ) 

Basandosi leggermente sulle risposte di altre persone. Ora permettendoti di specificare il file da cui vuoi leggere e la variabile che vuoi inserire nel risultato:

 @echo off for /f "delims=" %%x in (%2) do ( set %1=%%x exit /b ) 

Questo significa che puoi usare quanto sopra come questo (assumendo che tu lo abbia chiamato getline.bat)

 c:\> dir > test-file c:\> getline variable test-file c:\> set variable variable= Volume in drive C has no label. 

Un solo supporto, utile per il reindirizzamento stdout con “>”:

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

Prova questo

 @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 

Il problema con le soluzioni EXIT /B , quando più realisticamente all’interno di un file batch come solo una parte di esso è il seguente. Non c’è elaborazione successiva all’interno del file batch detto dopo EXIT /B Di solito c’è molto di più rispetto a un solo compito limitato.

Per contrastare questo problema:

 @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 

(Tuttavia, i cosiddetti personaggi velenosi saranno ancora un problema.)

Maggiori informazioni sull’argomento di ottenere una linea particolare con i comandi batch:

Come posso ottenere l’n, la prima e l’ultima riga di un file di testo? ” http://www.netikka.net/tsneti/info/tscmd023.htm

[Aggiunto il 28-ago-2012] Si può anche avere:

 @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 

Nota: gli approcci sui file batch saranno limitati al limite di riga per il processore di comandi DOS – vedi Qual è il limite di lunghezza della riga di comando? .

Pertanto, se si tenta di elaborare un file con più righe di 8192 caratteri, lo script salterà semplicemente perché il valore non può essere mantenuto.

Un altro modo

 setlocal enabledelayedexpansion @echo off for /f "delims=" %%i in (filename.txt) do ( if 1==1 ( set first_line=%%i echo !first_line! goto :eof ))