¿Cómo se puede leer un archivo (texto o binario) de un archivo por lotes? ¿Hay alguna forma de leerlo en modo binario o en modo texto?
TYPE [fileName]
para MS-Dos.
¿Cómo se puede leer un archivo (texto o binario) de un archivo por lotes? ¿Hay alguna forma de leerlo en modo binario o en modo texto?
TYPE [fileName]
para MS-Dos.
Respuestas:
Puede usar el comando for:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Tipo
for /?
en el símbolo del sistema. Además, puede analizar archivos ini .
for /?
el comando , analizaría cada línea en myfile.txt, ignorando las líneas que comienzan con un punto y coma, pasando el segundo y tercer token de cada línea al cuerpo de for, con tokens delimitados por comas y / o espacios.
En cmd.exe estilo NT, puede recorrer las líneas de un archivo de texto con
FOR /F %i IN (file.txt) DO @echo %i
Escriba "ayuda para" en el símbolo del sistema para obtener más información. (no sé si eso funciona en cualquier "DOS" que esté usando)
%%i
.
El FOR-LOOP generalmente funciona, pero hay algunos problemas. El FOR no acepta líneas vacías y las líneas con más de ~ 8190 son problemáticas. La expansión solo funciona de manera confiable, si la expansión retardada está desactivada.
La detección de CR / LF frente a LF simple también parece un poco complicada.
También los caracteres NUL son problemáticos, ya que FOR-Loop cancela inmediatamente la lectura.
La lectura binaria directa parece, por tanto, casi imposible.
El problema de las líneas vacías se puede solucionar con un truco. Prefije cada línea con un número de línea, usando el comando findtr, 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 la expansión retardada habilitada y deshabilitada es necesario para el trabajo seguro con cadenas, como !
o ^^^xy!z
.
Eso es porque la línea set "var=%%a"
solo es segura con DisabledDelayedExpansion ; de lo contrario, los signos de exclamación se eliminan y los signos de intercalación se usan como caracteres de escape (secundarios) y también se eliminan.
Pero usar la variable var
solo es seguro con EnabledDelayedExpansion , ya que incluso a call %%var%%
fallará con contenido como "&"&
.
EDITAR: Variante set / p agregada
Hay una segunda forma de leer un archivo con set /p
, las únicas desventajas son que está limitado a ~ 1024 caracteres por línea y elimina los caracteres de control al final de la línea.
Pero la ventaja es que no necesita el cambio retrasado y es más fácil almacenar valores en 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 una representación hexadecimal,
podría mirar SO: convertir un archivo binario en una representación HEX usando un archivo por lotes
set /p
. Solía set /p value=< result.txt
obtener la primera línea de un archivo de texto
0x1A
? ¿Se for /F
comporta de la misma manera que con los caracteres NUL ( 0x00
)?
:
o ;
o contienen!
Una forma muy sencilla de hacerlo es utilizar el siguiente comando:
set /p mytextfile=< %pathtotextfile%\textfile.txt
echo %mytextfile%
Esto solo mostrará la primera línea de texto en un archivo de texto. La otra forma de hacerlo es usar el siguiente comando:
type %pathtotextfile%\textfile.txt
Esto pondrá todos los datos del archivo de texto en la pantalla. ¡Espero que esto ayude!
Bueno, hay muchas formas diferentes, pero si solo desea MOSTRAR el texto y no GUARDARLO en ningún lugar, simplemente use: findstr /v "randomtextthatnoonewilluse" filename.txt
Código corregido:
setlocal enabledelayedexpansion
for /f "usebackq eol= tokens=* delims= " %%a in (`findstr /n ^^^^ "name with spaces.txt"`) do (
set line=%%a
set "line=!line:*:=!"
echo(!line!
)
endlocal
pause
eol=
y delims=
son superfluos, set line=%%a
deben usar comillas y sin alternar el modo de expansión retardada, el código no puede leer signos de exclamación
Un código que muestra el contenido del archivo myfile.txt en la pantalla
set% filecontent% = 0
tipo% filename% >>% filecontent%
echo% filecontent%