o problema em seu script era uma coisa muito estranha sobre scripts em lote. Para obter variáveis de ambiente para atualizar dentro de um IF ou PARA você tem que usar setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
e !var!
. Se você está curioso, o absurdo (o que acontece se você não incluir essa linha setlocal com o! Var!) É explicado em mais detalhes em set /?
.
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (set state=UP) ELSE (set state=DOWN)
echo 172.%%x.%%y.%%z is !state! >> state.txt
)))
E se você quiser apenas os que estão em alta. Tente isto
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
for /L %%x in (18,1,25) do (
for /L %%y in (1,1,254) do (
for /L %%z in (1,1,254) do (
ping -n 1 -w 1000 172.%%x.%%y.%%z | find "Reply" > NUL
IF NOT ERRORLEVEL 1 (
set state=UP
echo 172.%%x.%%y.%%z is !state! >> state.txt
) ELSE (
set state=DOWN
)
)))