web-dev-qa-db-fra.com

Commande (s) batch de Windows pour lire la première ligne d'un fichier texte

Comment lire la première ligne d'un fichier texte à l'aide d'un fichier de commandes Windows? Étant donné que le fichier est volumineux, je ne souhaite traiter que la première ligne.

73
Jesse Vogt

Voici un fichier de commandes à usage général pour imprimer les premières lignes n à partir d'un fichier tel que l'utilitaire GNU head, au lieu d'une seule ligne.

@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

Par exemple:

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

Il ne compte pas actuellement les lignes vierges. Il est également soumis à la restriction de longueur de ligne de fichier de traitement par lots de 8 Ko.

44
indiv

euh? imo c'est beaucoup plus simple 

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

Euh les gars ...

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

Vous pourriez essayer ceci:

@echo off

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

edit Ou alors, disons que vous avez quatre colonnes de données et que vous voulez de la cinquième rangée vers le bas, essayez ceci:

@echo off

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

Merci à thetalkingwalnut avec answer commande (s) batch de Windows pour lire la première ligne du fichier texte j’ai eu la solution suivante:

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

Un liner, utile pour la redirection stdout avec ">":

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

Légèrement en s'appuyant sur les réponses des autres. Vous permettant maintenant de spécifier le fichier que vous voulez lire et la variable dans laquelle vous voulez insérer le résultat:

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

Cela signifie que vous pouvez utiliser ce qui précède comme ceci (en supposant que vous l'appeliez getline.bat)

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

Essaye ça

@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

Le problème avec les solutions EXIT /B, lorsque, de manière plus réaliste, se trouve dans un fichier de commandes comme une partie de celui-ci est le suivant. Il n'y a pas de traitement ultérieur dans ledit fichier de commandes après le EXIT /B. Habituellement, les lots ne se limitent pas à une tâche limitée.

Pour contrer ce problème:

@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

(Cependant, les soi-disant personnages de poison seront toujours un problème.)

En savoir plus sur l'obtention d'une ligne particulière avec des commandes batch:

Comment obtenir le nième, la première et la dernière ligne d'un fichier texte? " http://www.netikka.net/tsneti/info/tscmd023.htm

[Ajouté le 28 août 2012] On peut aussi avoir:

@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

Voici une solution de contournement utilisant powershell:

powershell (Get-Content file.txt)[0]

(Vous pouvez facilement lire aussi une plage de lignes avec powershell (Get-Content file.txt)[0..3])

Si vous devez définir une variable dans un script batch comme première ligne de file.txt, vous pouvez utiliser:

for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")
1
mmj

Notez que les approches de fichier de commandes seront limitées à la limite de ligne pour le processeur de commande DOS - voir Quelle est la limite de longueur de ligne de commande?

Donc, si vous essayez de traiter un fichier qui contient des lignes de plus de 8192 caractères, le script les ignorera car la valeur ne peut pas être conservée. 

0
kevinjansz

Pour copier un fichier (file1.txt, file1[1].txt, file1[2].txt, etc.):

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%

Et ça court.

0
Laercio

Autrement

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