Batch file 使用Bat文件进行Ping测试-errorlevel出现问题
我正在使用批处理文件设置LAN ping测试。我的代码对网站很有用,但对本地IP来说却很奇怪。我正在3台我知道IP的计算机上运行ping测试。无论我拔下哪个,当我运行下面的代码时,所有三台计算机上的%errorlevel%始终为0。它永远不会像在网站上那样等于1。我如何解决这个问题Batch file 使用Bat文件进行Ping测试-errorlevel出现问题,batch-file,ping,Batch File,Ping,我正在使用批处理文件设置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.co
@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)
虽然我无法复制您的问题,但我确实对您的脚本有一些建议。(有关该问题的问题,请参见我的评论)
setlocal
和endlocal
@echo关闭
setlocal
cls
设置“IPaddress=www.google.com”
调用:PingVerbose“%IPaddress%”
电话:PingVerbose“www.yahoo.com”
电话:PingVerbose“www.microsoft.com”
暂停>nul
端部
退出/b0
:Ping
ping“%~1”-n1>nul
退出/b%ErrorLevel%
:ping冗长
呼叫:Ping%1&&echo%1处于联机状态| | echo%1处于脱机状态
退出/b%ErrorLevel%
虽然我无法复制您的问题,但我确实对您的脚本有一些建议。(有关该问题的问题,请参见我的评论)
setlocal
和endlocal
@echo关闭
setlocal
cls
设置“IPaddress=www.google.com”
调用:PingVerbose“%IPaddress%”
电话:PingVerbose“www.yahoo.com”
电话:PingVerbose“www.microsoft.com”
暂停>nul
端部
退出/b0
:Ping
ping“%~1”-n1>nul
退出/b%ErrorLevel%
:ping冗长
呼叫:Ping%1&&echo%1处于联机状态| | echo%1处于脱机状态
退出/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设置了错误级别时才会执行。尽管我也无法复制您的问题,我也有一个改进脚本的建议-
@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设置了错误级别时才会执行。当您ping子网中的不可访问地址时,您会得到一个“无法访问”的答案,发送1个数据包,接收1个打包数据包,丢失0个数据包。未设置错误级别
当您将一个不可访问的地址ping出子网时,您会得到一个“超时”应答,发送1个数据包,接收0个数据包,丢失1个数据包。已设置错误级别 并且,您可以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
)
当您在子网中ping一个不可访问的地址时,您会得到一个“不可访问”的答案,发送1个数据包,接收1个数据包,丢失0个数据包。未设置错误级别
当您将一个不可访问的地址ping出子网时,您会得到一个“超时”应答,发送1个数据包,接收0个数据包,丢失1个数据包。已设置错误级别 并且,您可以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
)
考虑到其他人所提到的,我想展示一个人可能需要如何完成上面所示的一切,以及如何使用修改过的变量,例如循环中的计数器 注意:使用“setlocal enabledelayedexpansion”允许在循环等中使用修改过的变量
@echo off
setlocal enabledelayedexpansion
REM List of systems to check
set list=www.google.com www.yahoo.com www.notasite.com
set /a failed=0
set /a passed=0
set /a count=0
echo PingTest Servers on %list% :
(for %%a in (%list%) do (
set /a "count+=1"
call :PingVerbose %%a && set /a "passed=!passed!+1" || set /a "failed=!failed!+1"
))
echo ------------
echo Result: %passed% of %count% systems are pingable
pause
endlocal
exit /b 0
:Ping <Address>
ping "%~1" -n 1 >NUL
exit /b %ErrorLevel%
:PingVerbose <Address>
call :Ping %1 && echo %~1 - [ONLINE] || echo %~1 - [OFFLINE]
exit /b %ErrorLevel%
考虑到其他人所提到的,我想展示一个人可能需要如何完成上面所示的一切,以及如何使用修改过的变量,例如循环中的计数器 注意:使用“setlocal enabledelayedexpansion”允许在循环等中使用修改过的变量
@echo off
setlocal enabledelayedexpansion
REM List of systems to check
set list=www.google.com www.yahoo.com www.notasite.com
set /a failed=0
set /a passed=0
set /a count=0
echo PingTest Servers on %list% :
(for %%a in (%list%) do (
set /a "count+=1"
call :PingVerbose %%a && set /a "passed=!passed!+1" || set /a "failed=!failed!+1"
))
echo ------------
echo Result: %passed% of %count% systems are pingable
pause
endlocal
exit /b 0
:Ping <Address>
ping "%~1" -n 1 >NUL
exit /b %ErrorLevel%
:PingVerbose <Address>
call :Ping %1 && echo %~1 - [ONLINE] || echo %~1 - [OFFLINE]
exit /b %ErrorLevel%
局域网上的每台计算机都分配了静态IP还是动态IP?DHCP打开了吗?如果是这样,我建议使用计算机名,而不是他们的IP地址<代码>ping通过这种方式,您正在查找特定的计算机,而不是分配该IP地址的任何设备。使用dynamics进行测试时,我计划运行的计算机将处于静态状态。我想使用IP,以防在任何时候出现名称解析问题。局域网上的每台计算机都被分配了静态IP还是动态IP?DHCP打开了吗?如果是这样,我建议使用计算机名,而不是他们的IP地址<代码>ping通过这种方式,您正在查找特定的计算机,而不是分配该IP地址的任何设备。使用dynamics进行测试时,我计划运行的计算机将处于静态状态。我想使用IPs,以防在任何时候出现名称解析的问题。这是一个非常深思熟虑的回应,应该进行表决。我可能会稍微解释一下“功能”是如何工作的,但也许它足够直观?这是一个非常深思熟虑的回答,应该被提升。我可能会解释一下“函数”是如何工作的,但也许它足够直观?