Comando (s) por lotes de Windows para leer la primera línea del archivo de texto

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

  •  02-07-2019
  •  | 
  •  

Pregunta

¿Cómo puedo leer la primera línea de un archivo de texto con un archivo por lotes de Windows? Como el archivo es grande, solo quiero tratar con la primera línea.

¿Fue útil?

Solución

Aquí hay un archivo por lotes de propósito general para imprimir las líneas superiores n de un archivo como la utilidad GNU head , en lugar de una sola 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 las líneas en blanco. También está sujeto a la restricción de longitud de línea de archivo por lotes de 8 KB.

Otros consejos

uh? imo esto es mucho más simple

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

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

Puede intentarlo:

@echo off

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

editar O, digamos que tiene cuatro columnas de datos y desea 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
)

Gracias a thetalkingwalnut con la respuesta lote de Windows comando (s) 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
)

Sobre la base de las respuestas de otras personas. Ahora le permite especificar el archivo del que desea leer y la variable en la que desea colocar el resultado:

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

Esto significa que puedes usar el anterior de esta manera (asumiendo que lo llamaste getline.bat)

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

Un trazador de líneas, útil para la redirección de stdout con " > " ;:

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

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

El problema con las soluciones EXIT / B , cuando de manera más realista dentro de un archivo por lotes, ya que solo una parte de él es el siguiente. No hay procesamiento posterior dentro de dicho archivo por lotes después del EXIT / B . Por lo general, los lotes son mucho más que 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 envenenados seguirán siendo un problema.)

Más sobre el tema de obtener una línea particular con comandos por lotes:

  

¿Cómo obtengo la novena, 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] También se 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

Aquí hay una solución alternativa utilizando powershell :

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

(También puede leer fácilmente un rango de líneas con powershell (Get-Content file.txt) [0..3] )

Si necesita establecer una variable dentro de un script por lotes como la primera línea de file.txt , puede usar:

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

Tenga en cuenta que los enfoques de archivo por lotes se limitarán al límite de línea para el procesador de comandos de DOS; consulte ¿Cuál es el límite de longitud de la línea de comando? .

Por lo tanto, si se intenta procesar un archivo que tiene más de un 8192 caracteres, el script solo los omitirá ya que el valor no se puede mantener.

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

Para cicle un archivo ( 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%

Y se está ejecutando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top