使用Bat文件进行Ping测试 - 有错误级别的麻烦

PY_*_*PY_ 1 ping batch-file

我正在使用批处理文件设置LAN ping测试.我的代码对网站很有用,但对本地IP来说却很奇怪.我在3台知道IP的计算机上运行ping测试.无论我拔掉哪一个,当我运行下面的代码时,%errorlevel%在所有三台计算机上始终为0.它永远不会像在网站上那样等于1.我该如何解决这个问题?

@echo off
cls
Set IPaddress=www.google.com
PING %IPaddress% -n 1
 call :PingTest

Set IPaddress=www.yahoo.com
PING %IPaddress% -n 1
 call :PingTest

Set IPaddress=www.unabletoping.com
PING %IPaddress% -n 1
 call :PingTest

pause > null
exit

:PingTest
IF %errorlevel% EQU 1 (echo "Server is Offline") else (GOTO:EOF)
Run Code Online (Sandbox Code Playgroud)

MC *_* ND 15

当您在子网中ping不可访问的地址时,会收到"无法访问"的答案,发送1个数据包,收到1个数据包,丢失0个数据包.未设置Errorlevel.

当您从子网中ping不可访问的地址时,会收到"超时"应答,发送1个数据包,收到0个数据包,丢失1个数据包.Errorlevel已设置.

并且,您可以ping活动计算机,丢失数据包并获得错误级别

并且,您可以ping活动/非活动计算机,使TTL过期并且不会出现错误级别

更好,检查ping响应的内容.

ping -n 1 192.168.1.1 | find "TTL=" >nul
if errorlevel 1 (
    echo host not reachable
) else (
    echo host reachable
)
Run Code Online (Sandbox Code Playgroud)