[Batch] Problema para enviar un find a un archivo y obtenerlo como variable

Iniciado por Shike1000, 16 Febrero 2020, 11:24 AM

0 Miembros y 1 Visitante están viendo este tema.

Shike1000

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.

¿Que estoy haciendo mal? Muchas gracias

@echo on

for /f "tokens=*" %%a in (ip.txt) do (

   ping %%a | find "0% perdidos" > trash.txt
   set /p VAR=<trash.txt

   if %VAR% EQU == "(0% perdidos)," (
       echo El equipo %%a esta operativo
   ) else (
       echo El equipo %%a no esta operativo )

)
echo Proceso por lotes finalizado

EdePC

Saludos,

- Los For tienen la limitación de NO actualizar las variables hasta que dicho For haya terminado, tienes que especificar EnableDelayedExpansion para cambiar este comportamiento y utilizar ! en lugar de % para referenciar variables.

- En archivos Batch tienes que usar siempre doble % a no ser que se traten de variables de entorno %variable%

- El operador en If EQU sirve para comparar valores numéricos, usa == para comparar texto y usa las comillas para aclararlo, asegúrate de especificar exactamente e texto completo a comparar, en tu caso debe llevar cuatro espacios delante

- Para obtener caracteres especiales como vocales tildadas (á) debes buscar el equivalente haciendo un Echo á>atilde.txt, luego en atilde.txt tienes el caracter que debes usar para obtener á

@Echo off
SetLocal EnableDelayedExpansion
For /F %%a In (ip.txt) Do (
  Ping %%a | Find "0%% perdidos">trash.txt
  Set /P VAR=<trash.txt
  If "!VAR!" == "    (0%% perdidos)," (
    Echo El equipo %%a está operativo
  ) Else (
    Echo El equipo %%a no está operativo
  )
)
EndLocal
Pause


----------------
---- Error de GeSHi?

Código (dos) [Seleccionar]
@Echo off
SetLocal EnableDelayedExpansion
For /F %%a In (ip.txt) Do (
  Ping %%a | Find "0%% perdidos">trash.txt
  Set /P VAR=<trash.txt
  If "!VAR!" == "    (0%% perdidos)," (
    Echo El equipo %%a está operativo
  ) Else (
    Echo El equipo %%a no está operativo
  )
)
EndLocal
Pause

Shike1000

Muchas gracias por la solucion y por explicarme el funcionamiento, me ha ayudado a poder entender todo