Isso ocorre porque o destino está na sua sub-rede local. Se o destino estiver fora de sua sub-rede local, o Request timed out.
esperado será visto. No entanto, até destinos inexistentes na sua sub-rede local reportarão Reply from x.x.x.x: Destination host unreachable.
. Como este post de hidromassagem explica, tudo depende se é o primeiro salto que expirou - e pingar sua sub-rede local é apenas um único salto . Aparentemente, é por design que o errorlevel é definido como 0
quando qualquer resposta é recebida, e host unreachable
conta como resposta.
Soluções alternativas
Analisando ping
de saída com findstr
Fonte: link
A seguir, o ping será executado uma vez ( ping -n 1
). O %1
é o primeiro param passado para o arquivo em lotes. A variável attrib
é definida dependendo se o destino responde ou não.
echo Scanning %1
set attrib=responding
ping -n 1 %1|Findstr /I /C:"timed out" /C:"host unreachable" /C:"could not find host"
if %errorlevel%==0 set attrib=nonresponsive
Utilitário separado
Existe um utilitário interessante chamado vivo . Eu não tentei, e foi lançado em 2002, por isso pode nem funcionar no Windows 7. No entanto, se funcionar, ele irá definir o errorlevel para 2 quando o host de destino estiver inacessível. Eu não recomendaria isso, no entanto.