batch-file - txt - leer una linea de un archivo en cmd
Comando(s) de lote de Windows para leer la primera lĂnea del archivo de texto (11)
¿Cómo puedo leer la primera línea de un archivo de texto usando un archivo por lotes de Windows? Como el archivo es grande, solo quiero tratar con la primera línea.
De otra manera
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
El problema con las soluciones EXIT /B
, cuando es más realista dentro de un archivo por lotes que solo una parte del mismo, es el siguiente. No hay procesamiento posterior dentro de dicho archivo por lotes después de EXIT /B
Por lo general, hay mucho más en lotes que solo una tarea limitada.
Para contrarrestar ese 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
(Sin embargo, los llamados caracteres venenosos seguirán siendo un problema).
Más sobre el tema de obtener una línea particular con los comandos por lotes:
¿Cómo obtengo la n''th, la primera y la última línea de un archivo de texto? " http://www.netikka.net/tsneti/info/tscmd023.htm
[Agregado el 28 de agosto de 2012] Uno también puede tener:
@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
Gracias a thetalkingwalnut con la respuesta del comando de lote de Windows para leer la primera línea del archivo de texto, se me ocurrió la siguiente solución:
@echo off
for /f "delims=" %%a in (''type sample.txt'') do (
echo %%a
exit /b
)
Ligeramente construyendo sobre las respuestas de otras personas. Ahora le permite especificar el archivo desde el que desea leer y la variable en la que desea que se coloque el resultado:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
Esto significa que puede usar lo anterior de esta manera (suponiendo que lo haya llamado getline.bat)
c:/> dir > test-file
c:/> getline variable test-file
c:/> set variable
variable= Volume in drive C has no label.
Prueba esto
@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
Puede probar esto:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
edit O, digamos que tiene cuatro columnas de datos y quiere desde la quinta fila hasta la parte inferior, intente esto:
@echo off
for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
echo %%a %%b %%c %%d
)
Tenga en cuenta que los enfoques del archivo por lotes estarán limitados al límite de línea para el procesador de comandos de DOS: consulte ¿Cuál es el límite de longitud de línea de comando? .
Por lo tanto, si intenta procesar un archivo que tiene líneas de más de 8192 caracteres, el script simplemente salteará, ya que no se puede retener el valor.
Un trazador de líneas, útil para la redirección stdout con ">":
@for /f %%i in (''type yourfile.txt'') do @echo %%i & exit
Ustedes chicos ...
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:/>
eh? imo esto es mucho más simple
set /p texte=< file.txt
echo %texte%
Aquí hay un archivo de proceso por lotes de propósito general para imprimir las primeras n
líneas de un archivo como la utilidad head
GNU, en lugar de solo una línea.
@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
Por ejemplo:
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
Actualmente no cuenta líneas en blanco. También está sujeto a la restricción de longitud de línea de archivo por lotes de 8 KB.