¿Cómo se puede leer un archivo (texto o binario) de un archivo por lotes? Hay una forma de leerlo en modo binario o modo de texto?Batch files: ¿Cómo leer un archivo?
Respuesta
Puede utilizar el comando para:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Tipo
for /?
en el símbolo del sistema. ¡También puedes parse ini files!
Este es un ejemplo bastante complejo, al analizar información muy específica de un archivo de texto con formato especial, sin dar ninguna explicación. Según 'for /?' El comando * analizaría cada línea en myfile.txt, ignorando las líneas que comienzan con un punto y coma, pasando el 2 ° y 3 ° token de cada línea al cuerpo, con tokens delimitados por comas y/o espacios . * –
Bajo cmd.exe al estilo NT, puede recorrer a través de las líneas de un archivo de texto con
FOR /F %i IN (file.txt) DO @echo %i
Tipo "Ayuda" en el símbolo del sistema para obtener más información. (No sé si funciona en cualquier "DOS" que está utilizando)
Debería ser '%% i'. –
Este comando dejará de leer una línea si encuentra un carácter de espacio en blanco. Finalmente terminé usando FOR/F "tokens = *" %% i IN (archivo.txt) DO @ECHO %% i – Jason
¡Funciona! y Si está usando la consola, pruebe% i si está usando un archivo bat entonces intente %% i. –
El FOR-LOOP generalmente funciona, pero hay algunos problemas. FOR no acepta líneas vacías y las líneas con más de ~ 8190 son problemáticas. La expansión funciona solo de manera confiable, si la expansión demorada está deshabilitada.
La detección de CR/LF frente a una sola LF parece también un poco complicada.
También los caracteres NUL son problemáticos, ya que FOR-Loop cancela inmediatamente la lectura.
Direct lectura binaria parece por lo tanto casi imposible.
El problema con las líneas vacías se puede resolver con un truco. Prefija cada línea con un número de línea, utilizando el comando findstr, y después de leer, elimine el prefijo.
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
alternar entre activar y expansión retardada con discapacidad es neccessary para el trabajo seguro con cuerdas, como !
o ^^^xy!z
.
Esto se debe a que la línea set "var=%%a"
solo es segura con DisabledDelayedExpansion, de lo contrario, los signos de admiración se eliminan y los caracteres de intercalación se utilizan como caracteres de escape (secundarios) y también se eliminan.
Pero usar la variable var
es solo seguro con EnabledDelayedExpansion, ya que incluso un call %%var%%
fallará con contenido como "&"&
.
EDITAR: Añadido fija/variante p
Hay una segunda forma de leer un archivo con set /p
, las únicas desventajas son que se limita a ~ 1024 caracteres por línea y se elimina caracteres de control al final de línea .
Pero la ventaja es que no necesita la conmutación retrasada y es más fácil de almacenar valores en las variables
@echo off
setlocal EnableDelayedExpansion
set "file=%~1"
for /f "delims=" %%n in ('find /c /v "" %file%') do set "len=%%n"
set "len=!len:*: =!"
<%file% (
for /l %%l in (1 1 !len!) do (
set "line="
set /p "line="
echo(!line!
)
)
Para leerlo "binario" en un hexágono representación
Usted podría mirar SO: converting a binary file to HEX representation using batch file
Gracias por el puntero sobre el uso de 'set/p'. Utilicé 'set/p value =
Jeb, hice una pregunta relacionada con su solución anterior en http://stackoverflow.com/questions/11408295/with-dos -batch-file-how-to-parse-a-file-and-output-part-to-one-file-part-to-an – Nicholas
¿Qué pasa con el carácter EOF (final de archivo), ASCII '0x1A' ? ¿'for/F' se comporta de la misma manera que con los caracteres NUL (' 0x00')? – aschipfl
si quieren sólo para mostrarlo en cmd, puede utilizar esto:
cat myfile.txt
'cat' no es un comando de Windows , deberías usar 'type' para eso. –
Bueno theres al ot de diferentes maneras, pero si sólo desea mostrar el texto y lo almacene en cualquier lugar a continuación, sólo tiene que utilizar: findstr /v "randomtextthatnoonewilluse" filename.txt
Una manera muy fácil de hacerlo es utilizar el siguiente comando:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Esta voluntad solo muestra la primera línea de texto en un archivo de texto. La otra manera de hacerlo es utilizar el siguiente comando:
type %pathtotextfile%\textfile.txt
Esto pondrá todos los datos en el archivo de texto en la pantalla. ¡Espero que esto ayude!
- 1. Windows Batch Files: if else
- 2. Do Batch files support multiline variables
- 3. Windows batch files: variable de configuración en el ciclo
- 4. Leer variables de entorno del archivo en Windows Batch (cmd.exe)
- 5. Windows batch files: ¿Cómo establecer una variable con el resultado de un comando?
- 6. ¿Cómo leer el contenido del archivo desde un archivo?
- 7. ¿Cómo se evita que un archivo Windows Batch salga temprano?
- 8. Cómo leer un archivo pim.vol
- 9. Groovy load .csv files
- 10. ¿Cómo leer un CD como un archivo?
- 11. ¿Cómo leer un archivo .properties dentro de un archivo .xsl?
- 12. ¿Cómo leer un archivo de un archivo jar?
- 13. Cómo leer un archivo CSV usando iOS
- 14. Cómo leer en un archivo txt
- 15. Cómo leer un archivo abierto en Ruby
- 16. cómo leer un archivo pdf usando lisp
- 17. ¿Cómo leer un archivo XML con Java?
- 18. ¿Cómo puedo leer un archivo .docx?
- 19. ¿Cómo puedo leer un archivo con Ruby?
- 20. ¿Cómo leer bits de un archivo?
- 21. ¿Cómo leer un archivo de internet?
- 22. Tailing Rolling Files
- 23. Windows Batch Copie el archivo por nombre de archivo
- 24. Abrir y leer un archivo con askopenfilename
- 25. leer un archivo binario (pitón)
- 26. Verifique si existe algún tipo de archivo en un directorio usando el script BATCH
- 27. ¿Cómo leer el archivo .class?
- 28. ¿Cómo leer un archivo desde un URI usando StreamReader?
- 29. ¿Cómo escribir y leer un archivo con un HashMap?
- 30. Cómo leer un archivo dentro de un Jar con JRuby
@ RookieTEC9: sí, sé que son 2 cosas completamente diferentes, pero necesitaba una respuesta que funcionara en msdos, no en windows nt (o versiones más recientes), también esta pregunta fue hecha hace 7 años, tenga eso en mente –
@ RookieTEC9: Creo que tienes razón, ha pasado un tiempo desde esto. Eliminaré la etiqueta ms-dos –
Puede usar el comando 'TYPE [fileName]' para MS-Dos. – RookieTEC9