Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Shike1000 en 16 Febrero 2020, 11:24 am



Título: [Batch] Problema para enviar un find a un archivo y obtenerlo como variable
Publicado por: Shike1000 en 16 Febrero 2020, 11:24 am
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

Código:
@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


Título: Re: [Batch] Problema para enviar un find a un archivo y obtenerlo como variable
Publicado por: EdePC en 17 Febrero 2020, 01:19 am
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 á

Código:
@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
  1. @Echo off
  2. SetLocal EnableDelayedExpansion
  3. For /F %%a In (ip.txt) Do (
  4.  Ping %%a | Find "0%% perdidos">trash.txt
  5.  Set /P VAR=<trash.txt
  6.  If "!VAR!" == "    (0% style="color: #448888;">% perdidos)," (
  7.    Echo El equipo %%a está operativo
  8.  ) Else (
  9.    Echo El equipo %%a no está operativo
  10.  )
  11. )


Título: Re: [Batch] Problema para enviar un find a un archivo y obtenerlo como variable
Publicado por: Shike1000 en 17 Febrero 2020, 18:50 pm
Muchas gracias por la solucion y por explicarme el funcionamiento, me ha ayudado a poder entender todo