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

StackOverflow https://stackoverflow.com/questions/130116

  •  02-07-2019
  •  | 
  •  

Question

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

Était-ce utile?

La solution

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 commandes de 8 Ko.

Autres conseils

euh? imo c'est beaucoup plus simple

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

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

Vous pouvez essayer ceci:

@echo off

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

modifier 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
)

Merci à thetalkingwalnut pour sa réponse Lot Windows commande (s) pour lire la première ligne du fichier texte J'ai proposé la solution suivante:

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

Construire légèrement sur les réponses des autres. Vous permettant maintenant de spécifier le fichier à partir duquel vous souhaitez lire et la variable dans laquelle vous souhaitez placer 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.

Une doublure, utile pour la redirection stdout avec ">":

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

Essayez ceci

@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

Le problème posé par les solutions EXIT / B , lorsque, de manière plus réaliste, se trouve dans un fichier de commandes en tant qu'une partie seulement est le suivant. Il n’ya 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 prétendus caractères de poison resteront un problème.)

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

  

Comment puis-je 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

Voici une solution de contournement utilisant powershell :

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

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

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

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

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

Par conséquent, si vous essayez de traiter un fichier comportant plus de lignes que plus de 8192 caractères, le script les ignorera car la valeur ne peut pas être conservée.

Autre moyen

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

Pour créer un fichier ( fichier1.txt , fichier1 [1] .txt , fichier1 [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 c'est en cours d'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top