¿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.Comandos de lote de Windows para leer la primera línea del archivo de texto
Respuesta
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 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 cuentan 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.
FYI: "GOTO: EOF" Esa es una etiqueta especial que saldrá de la secuencia de comandos sin tener que definir una etiqueta especial ": exit". También es útil al definir subrutinas en el lote (¿qué es lo que dices? ¿Subrutinas?) – Steven
Esto parece explotar en mis varios archivos de texto GB ... En un archivo me dio un error de "Memoria insuficiente" al intentar devuelve 10 líneas, en el otro archivo simplemente devolvió una sola línea en blanco al pedirle que devuelva 10 líneas. ¿Alguna idea de por qué sucede esto? – Dan
Mismo problema aquí .. –
Es posible probar esto:
@echo off
for /f %%a in (sample.txt) do (
echo %%a
exit /b
)
edición O, supongamos que tiene cuatro columnas de datos y desea de la 5ª 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
)
Esto me dio la pista que necesitaba pero no estaba del todo bien. No estoy seguro de cuál fue el procedimiento correcto, pero incorporé esta solución en la solución final. vea http://stackoverflow.com/questions/130116#130209 –
El problema de esta solución es que delimita en espacio en lugar de línea nueva, y no puede tener un nombre de archivo con espacios. Puede solucionar estos problemas con las opciones delims y usebackq en el ciclo for. – indiv
Gracias a thetalkingwalnut con la respuesta Windows batch command(s) to read first line from text file se me ocurrió la siguiente solución:
@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)
Basándose en las respuestas de otras personas. Ahora que le permite especificar el archivo que desea leer y la variable que desea el resultado pone en:
@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)
Esto significa que puede utilizar lo anterior como esto (suponiendo que llamaste getline.bat)
c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable
variable= Volume in drive C has no label.
Un forro, útil para redirigir la salida estándar con ">":
@for /f %%i in ('type yourfile.txt') do @echo %%i & exit
Esto no parece funcionar en Win 8.1: -/ –
Nota, los enfoques de archivos por lotes se limitará a la línea de límite para el procesador de comandos DOS - ver What is the command line length limit?.
De modo que si intenta procesar un archivo que tiene alguna línea más que caracteres, la secuencia de comandos saltará simplemente porque no se puede retener el valor.
Uh ustedes ...
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:\>
Si el archivo tiene más de 11 líneas imprimirá más que el primero, como: 1 :, 11 :, 21 :, etc ... –
Good catch Cesar ! Siempre trato de evitar las comillas porque me molestan, pero en este caso fue una mala idea. Para solucionarlo, cambie a "findstr"^1: "' y gane la calidez y la protección de comillas dobles. O bien, si desprecias las comillas como yo y quieres vivir peligrosamente, usa 'findstr/b 1:' –
si lo quieres sin comillas y sin la opción/b, simplemente escapa del símbolo de intercalación: 'findstr ^^ 1'. – dbenham
eh? imo esto es mucho más simple
set /p texte=< file.txt
echo %texte%
+1, esto es lo mejor cuando funciona :-) Tiene los siguientes límites 1) Longitud máxima de línea de 1021 bytes, sin incluir EOL. 2) El archivo debe usar EOL de estilo de Windows de CarriageReturn LineFeed.3) Los caracteres de control de rastreo se eliminarán de la línea – dbenham
Además, texte debe definirse explícitamente antes de leer el archivo, en caso de que la 1ra línea esté en blanco. – dbenham
No funciona .... platform win 7 – Jai
El problema con las soluciones EXIT/B, cuando más realista dentro de un archivo por lotes que sólo una parte de la misma es la 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 veneno seguirá siendo un problema.)
Más sobre el tema de conseguir una determinada línea con comandos por lotes:
"? 23} ¿Cómo consigo el enésimo, la primera y la última línea de un archivo de texto"
http://www.netikka.net/tsneti/info/tscmd023.htm
[Agregado 28-Ago-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
El set/p texte =
Prueba este
@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
Otra forma
setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))
Recomendaría usar un archivo .bat SOLAMENTE como último recurso. Si es posible, siempre intente usar un lenguaje de scripting "real": Powershell, WSH, Python ... CUALQUIER COSA menos archivos .bat. – paulsm4
El lote no es * tan * malo (cuando sabe, lo que hace, igual que con cualquier otro idioma). hhay: tu código no está funcionando. – Stephan
¿por qué la dosis no funciona la primera vez? – hhay
- 1. Cómo leer solo la primera línea de un archivo
- 2. Leer la última línea del archivo de texto
- 3. ¿Cómo recorre cada línea en un archivo de texto usando un archivo de lote de Windows?
- 4. ¿Leer solo la primera línea de un archivo?
- 5. Lote para eliminar filas duplicadas del archivo de texto
- 6. Leer/Analizar archivo de texto línea por línea en VBA
- 7. Leer variables de entorno del archivo en Windows Batch (cmd.exe)
- 8. de comandos por lotes de DOS para leer algo de información de archivo de texto
- 9. PHP: Leer línea específica del archivo
- 10. Leer un archivo de texto línea por línea en Qt
- 11. ¿Cómo obtener la última fecha de modificación del archivo en la línea de comandos de Windows?
- 12. C# saltarse primera línea de un archivo de texto
- 13. While loop, cómo leer desde la segunda línea del archivo de texto
- 14. C Eliminar la primera línea de un archivo de texto sin reescribir el archivo
- 15. Leer dos archivos de texto línea por línea simultáneamente -python
- 16. Cómo hacer que Copiar Postgres ignore la primera línea del archivo de texto grande
- 17. Perl: cómo elimino la primera línea de un archivo sin leer ni copiar todo el archivo
- 18. Leyendo la primera línea de un archivo en Ruby
- 19. Concatenar archivos de texto con la línea de comandos de Windows, soltando las líneas delanteras
- 20. Lote Color por línea
- 21. Validador de línea de comandos XML para Windows
- 22. Código de trabajo de Bash para eliminar la primera o la última línea del archivo
- 23. ¿Cómo obtener la primera línea de texto de un M-archivo de Matlab?
- 24. Leer un archivo de texto con php
- 25. Leer caracteres Unicode desde argumentos de línea de comandos en Python 2.x en Windows
- 26. Lote de lotes FlatFileItemReader leer varios archivos
- 27. Cómo leer eficientemente solo la última línea del archivo de texto
- 28. Salida Unicode en la línea de comandos de Windows?
- 29. Herramienta de diálogo de línea de comandos para Windows
- 30. Extracción de la primera línea de un archivo de texto en C#
Try GNU32 "cabeza" utilidad. No crea que lo que busca se logrará fácilmente con solo DOS Batch. – Nasir