Ms-Dos - Problema con mi pequeño codigo de batch

 
Vista:

Problema con mi pequeño codigo de batch

Publicado por Ezequiel (1 intervención) el 15/02/2020 20:52:53
Buenas, intento conseguir para un ejercicio de clase el cual es mostrar cuales equipos estan encendidos o apagados a traves de un ping, el problema es que lo que es el find no se guarda en el archivo trash.txt ya que el archivo al abrirlo esta en blanco, al menos no usando el for, si lanzo tan solo el comando funciona a la perfeccion. PD: Pense que fuera porque porque no leia las ips, pero en los echos aparece las ips de los equipos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
 
for /f "tokens=*" %%a in (ip.txt) do (
 
    ping %%a | find "0% perdidos" > trash.txt
    set /p VAR=<trash.txt
 
    if %VAR% EQU == "(0% recibidos)," (
        echo El equipo %%a esta operativo
    ) else (
        echo El equipo %%a no esta operativo )
 
)
echo Proceso por lotes finalizado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Problema con mi pequeño codigo de batch

Publicado por Antoni Masana (811 intervenciones) el 17/02/2020 00:30:07
Hay varios fallos por tu parte y otros por parte de los programadores de Microsoft.
A este engendro le llaman Sistema Operativo y deja mucho que desear.
Falla mas que una escopeta de tacos o de feria

Te pongo el código y te comento los fallos y de quien son:

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
for /f "tokens=*" %%a in (ip.txt) do Call :Pinga %%a
goto :EOF
echo Proceso por lotes finalizado
 
:Pinga
    ping %1 | find "(0%% perdidos)" > trash.txt
    set    VAR=
    set /p VAR=<trash.txt
    if "%VAR%" == "    (0%% perdidos)," (
        echo El equipo %1 esta operativo
    ) else (
        echo El equipo %1 no esta operativo )

Cuando haces el FIND te falta el paréntesis y poner dos %.
El paréntesis hace que diferencie 100% de 0% pero no son imprescindibles y los dos % es porque al ser un carácter especial se elimina si pones solo uno

En el IF has puesto EQU y == o una o la otra pero no las dos.

En el FIND pones la palabra perdidos y en el IF comparas con recibidos desde luego no cuadra.
El texto lo tienes que poner comillas y la variable también debe estar entre comillas y tener en cuanta los 4 espacios antes del paréntesis.



Hasta aquí tus errores.

Te voy a poner otra forma de hacerlo que esta poco documentada:

1
2
3
4
5
6
7
8
9
10
11
@echo off
for /f "tokens=*" %%a in (ip.txt) do Call :Pinga %%a
goto :EOF
echo Proceso por lotes finalizado
 
:Pinga
    ping %1 >nul
    if %ErrorLevel% EQU 0 (
        echo El equipo %1 esta operativo
    ) else (
        echo El equipo %1 no esta operativo )

Algunos comando retornan un valor que se recoge en la variable de entorno ErrorLevel indicando si han fallado o no.

Bien pues resulta que todo lo que se ejecuta dentro de un FOR es una fuente de problemas.

No asigna bien las variables con el SET.

En el segundo ejemplo si se pone como tu código, dentro de los paréntesis. el ErrorLevel no devuelve el resultado del PING sino el del FOR cosa que no tiene ningún sentido.

No sabe aparejar bien los paréntesis

Esto da error, porque apareja el primer paréntesis que abre con el primero que cierra, así por la cara.

1
2
3
4
5
if %ErrorLevel% EQU 0 (
    Set /A valor=(3+2)*5
) else (
    Set /A valor=0
)

Así la mejor forma es hacer un CALL en el FOR y problema resuelto.

Y respecto a este ultimo ejemplo:

1
2
3
Set Error=%ErrorLevel%
if     %Error% EQU 0 Set /A valor=(3+2)*5
if not %Error% EQU 0 Set /A valor=0
o
1
2
3
Set Error=%ErrorLevel%
if %Error% EQU 0 Set /A valor=(3+2)*5
if %Error% GTR 0 Set /A valor=0

Y un último detalle:

Si haces un SET /P ... y no se asigna un nuevo valor a la variable, esta conserva el valor anterior, es decir, no la deja vacía que sería lo esperado.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 3
Ha aumentado 1 puesto en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Problema con mi pequeño codigo de batch

Publicado por Ezequiel (1 intervención) el 17/02/2020 18:48:42
Muchas gracias por la explicación, me ha ayudado a poder entender mis errores
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar