¿Por qué no funciona este "for" en mi .bat?

He visto que se puede hacer un "barrido" de direcciones IP mediante consola (CMD), es decir, que con un "for" vaya haciendo ping a cada IP de la red para ver qué direcciones están siendo utilizadas y cuáles no. Funciona perfectamente desde la consola. Sin embargo pongo lo mismo en mi archivo por lotes (.bat), pero a la hora de ejecutar dicha instrucción el programa se cierra de inmediato...

¿Solo se puede hacer dicho barrido mediante una ventana CMD a parte o qué tengo que hacer para que me funcione en el archivo por lotes?

Os dejo la instrucción:

for /L %i in (1, 1, 255) do ping 192.168.1.%i

1 Respuesta

Respuesta
1

Tal como lo planteas parece que la causa es tan "sencilla" como que las variables de un FOR dentro de un BAT tienen que llevar doble %. Te pongo en la ventanita el texto de la ayuda del FOR (obtenida con FOR /? como puedes ver en la misma ventana):

C:\Documents and Settings\GGG>for /?
Ejecuta el comando para cada uno de los archivos especificados en el
conjunto de archivos.
FOR %variable IN (conjunto) DO comando [parámetros]
  %Variable Especifica un parámetro reemplazable de una sola letra.
  (Conjunto) Especifica un conjunto de uno o más archivos. Se pueden
              Usar comodines.
  Comando Especifica el comando que se ejecutará para cada archivo.
  Parámetros Especifica los parámetros o modificadores del comando
              Especificado.
Para usar el comando FOR en un programa por lotes, especificar
%%Variable en vez de %variable. Los nombres de las variables
distinguen entre mayúsculas y minúsculas, por lo tanto %i no es lo
mismo que %I.

(Fíjate en el último párrafo).

Por tanto deberías corregir el FOR del BAT para que diga:

for /L %%i in (1, 1, 255) do ping 192.168.1.%%i

Y, si lanzas el BAT desde el Explorador de Windows, te recomiendo que incluyas un PAUSE como última instrucción para poder ver los mensajes que te ofrezca el sistema antes de cerrar la ventana. Aunque acabo de comprobar que en este caso no entra al PAUSE, no acabo de entender por qué. De todas formas el mensaje que te has perdido sería (obtenido ejecutando el BAT desde una ventana CMD en vez de lanzarlo desde el Explorador de Windowsdesde el Explorador de Windows):

No se esperaba i en este momento.

¡Muchas Gracias! Otra vez más, un fallo tonto por no tener en cuenta la biblioteca "help" del CMD... Y otra vez salvándome jajaja

Un placer. Feliz Año 2019, ya puestos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas