elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Bug comando for (eol)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Bug comando for (eol)  (Leído 5,040 veces)
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
[BATCH] Bug comando for (eol)
« en: 1 Abril 2009, 11:27 am »

El comando for del cmd.exe tiene un bug con la opción /f.

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  :huh:).

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?


« Última modificación: 1 Abril 2009, 20:07 pm por 0x0309 » En línea

SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: [BATCH] Bug comando for (eol)
« Respuesta #1 en: 1 Abril 2009, 14:06 pm »

jajjaa...me dio risa lo de 14 años y nada que lo solucionan..es que definitivamente en microsoft no terminan de hacer las vainas...aparte ahora estan concentrados en otras vainas...y ya no prestan mucha atencion a lo relacionado con DOS....

Saludos.


En línea


leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [BATCH] Bug comando for (eol)
« Respuesta #2 en: 1 Abril 2009, 17:25 pm »

Una pena, yo pensé que la solución era eol=" cuando me avisaste  :-\

Tendremos que utilizar un caracter poco comun o no imprimible  :-\

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Descubrimiento en comando FOR [Batch]
Scripting
leogtz 0 2,263 Último mensaje 16 Abril 2009, 22:09 pm
por leogtz
[batch] mostrar ip utilizada con el comando net[Solucionado]
Scripting
moikano→@ 2 4,487 Último mensaje 14 Enero 2011, 21:50 pm
por moikano→@
[BATCH] Programar un batch con comando at
Scripting
WaAYa HaCK 5 3,467 Último mensaje 14 Septiembre 2011, 19:12 pm
por WaAYa HaCK
[Duda] comando If ( Batch )
Scripting
lagersito 6 3,919 Último mensaje 2 Octubre 2011, 22:00 pm
por $Edu$
¿Como se utiliza claramente el comando for? (batch)
Scripting
the_Avenger 8 7,431 Último mensaje 20 Octubre 2011, 15:38 pm
por $Edu$
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines