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.
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.
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 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
)
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
)
Un liner, utile pour la redirection stdout avec ">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
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.
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
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
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")
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.
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.
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
))