El manual dice que eol es el último carácter de la línea y en realidad es el primero, por lo que debería llamarse bol (begin of line)
El bug está en la opción eol del comando for /f, la opción por defecto es ';' el manual no dice nada de esto, por lo que si tenemos líneas que comienzen con ; estas serán ignoradas (y creíamos que leíamos todas las líneas de un archivo ).
Yo pensé que esto se solucionaba sobreescribiendo la opción eol así: eol=
Pero descubrí otro problema, si se ingresa más de una opción, el espacio separador entre la opción eol= y siguienteOpción es considerado por eol además de separador de opción, como carácter de comienzo de línea, por lo que líneas que comienzen con espacio son ignoradas.
Entonces, pensé que la solución era escribir eol= al final para que no hubiera ninguna otra opción a continuación y así realmente sobreescibir la opción por defecto (';') y leer todas las líneas de un archivo, y yo daba el tema por solucionado cuando hoy intentando hacer un script realmente útil para convertir unos textos con otro formato (el batch de utilidad) cuando descubrí que la opción eol es aún más tonta, y considera las comillas de cierre de opciones como carácter por lo que líneas que comienzen con '"' no son leídas.
Ahora ¿cómo leemos todas las líneas de un archivo con for /f?
Aún no le encuentro solución, ni me interesa, solo lo digo para que sepan.
Ejemplo:
archivo.txt
Código:
texto normal
;punto y coma
con espacio al principio
"entre comillas"
lee.bat
Código:
@echo off
Echo.Contenido del archivo:
Echo.texto normal
Echo.;punto y coma
Echo. con espacio al principio
Echo."entre comillas"
Echo.
Echo.Ahora las lecturas de for /f.
echo.
echo.Opcion: "tokens=* delims="
for /f "tokens=* delims=" %%a in (archivo.txt) do echo.%%a
echo.
echo.Opcion: "eol= tokens=* delims="
for /f "eol= tokens=* delims=" %%a in (archivo.txt) do echo.%%a
echo.
echo.Opcion: tokens=* delims= eol=
for /f "tokens=* delims= eol=" %%a in (archivo.txt) do echo.%%a
echo.
pause
resultado:
Código:
Opcion: "tokens=* delims="
texto normal
con espacio al principio
"entre comillas"
Opcion: "eol= tokens=* delims="
texto normal
;punto y coma
"entre comillas"
Opcion: tokens=* delims= eol=
texto normal
;punto y coma
con espacio al principio
O se pierden las líneas que comienzan con ; o espacio o comillas dobles.
Queda la pregunta de cómo leer todas las líneas. Me molesta el error, porque cmd.exe es un software viejo, desde el windows nt (1995) que existe, y además de que la documentación lo llama eol cuando debería llamarse bof (revisen la documentación, dice carácter de final de línea) no menciona que la opción por defecto es ';' y me molesta más aún cuando perdí tiempo buscando solución al resultado de mi script. Esto lo he probado en windows seven. 14 años cmd.exe con el error del eof, ¿no creen que es mucho?