Ping测试使用Bat文件 - 出错的错误级别

问题描述:

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

@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) 
+0

局域网上的每台计算机都分配了静态IP还是动态的? DHCP是否开启?如果是这样,我会建议使用计算机名称而不是他们的IP地址。 'ping '这样您就可以查找特定的计算机,而不是分配给该IP地址的任何设备。 –

+0

用动态测试,我预定的将运行的将会静态。我想在任何时间点使用IP来防止名称解析出现问题。 –

当你在你的子网中ping一个不可访问的地址时,你会得到一个“无法访问”的答案,1个包发送,1个包装收到,0个包丢失。错误级别未设置。

当你从你的子网ping出一个非可访问的地址时,你会得到一个“超时”的答案,发送1个数据包,接收0个数据包,丢失1个数据包。错误级别已设置。

而且,您可以ping一个活动的机器,丢失的数据包,并得到一个错误级别

而且,您可以ping一个有效/无效的机器,得到TTL过期,没有得到错误级别

更好,检查内容的响应。

ping -n 1 192.168.1.1 | find "TTL=" >nul 
if errorlevel 1 (
    echo host not reachable 
) else (
    echo host reachable 
) 
+0

非常感谢您的帮助。这解决了我的问题。再次感谢你。 –

虽然我无法复制您的问题,但我对您的脚本有一些建议。 (请参阅我对该问题的评论)

  1. 创建变量时会封装范围。 setlocalendlocal
  2. 当退出脚本时,使用/ b标志以不杀死调用者的命令提示符。
  3. nul not null。

例():

@echo off 
setlocal 
cls 

set "IPaddress=www.google.com" 
call :PingVerbose "%IPaddress%" 
call :PingVerbose "www.yahoo.com" 
call :PingVerbose "www.microsoft.com" 

pause>nul 
endlocal 
exit /b 0 

:Ping <Address> 
ping "%~1" -n 1 >nul 
exit /b %ErrorLevel% 

:PingVerbose <Address> 
call :Ping %1 && echo %~1 is Online || echo %~1 is Offline 
exit /b %ErrorLevel% 

虽然我也不能复制你的问题,也有一个建议,以更好地你的脚本 -

@echo off & cls 

set addresses=10.1.1.666 10.124.412.14 10.7.254.1 

for %%a in (%addresses%) do ping %%a -n 1 > nul || echo %%a is offline 

注意,命令后||只会如果通过ping设置了错误级别,则执行该命令。