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)
答
当你在你的子网中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
非常感谢您的帮助。这解决了我的问题。再次感谢你。 –
答
虽然我无法复制您的问题,但我对您的脚本有一些建议。 (请参阅我对该问题的评论)
- 创建变量时会封装范围。
setlocal
和endlocal
- 当退出脚本时,使用/ b标志以不杀死调用者的命令提示符。
- 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设置了错误级别,则执行该命令。
局域网上的每台计算机都分配了静态IP还是动态的? DHCP是否开启?如果是这样,我会建议使用计算机名称而不是他们的IP地址。 'ping'这样您就可以查找特定的计算机,而不是分配给该IP地址的任何设备。 –
用动态测试,我预定的将运行的将会静态。我想在任何时间点使用IP来防止名称解析出现问题。 –