使用批处理文件进行Ping测试 - 遇到错误级别问题

62 浏览
0 Comments

使用批处理文件进行Ping测试 - 遇到错误级别问题

我正在使用批处理文件设置局域网ping测试。我已经编写的代码在测试网站时运行良好,但对于本地IP地址却表现奇怪。我在三台电脑上运行ping测试,并知道它们的IP地址。无论我拔掉哪台电脑的网线,当我运行下面的代码时,所有三台电脑的%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 "服务器离线") else (GOTO:EOF)

0
0 Comments

在这个问题中,出现的原因是脚本中的PingVerbose函数没有正确处理errorlevel值。解决方法是在PingVerbose函数中使用call命令来调用Ping函数,并使用"&&"和"||"来根据errorlevel值打印相应的消息。

以下是修复后的脚本:

@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

ping "%~1" -n 1 >nul

exit /b %ErrorLevel%

:PingVerbose

call :Ping %1 && echo %~1 is Online || echo %~1 is Offline

exit /b %ErrorLevel%

这个修复后的脚本在调用PingVerbose函数时会正确处理errorlevel值,并根据结果打印相应的消息。

0
0 Comments

问题原因:ping命令后面的代码只有在ping命令返回错误级别时才会执行。

解决方法:检查ping命令返回的错误级别,并根据错误级别执行相应的操作。

0
0 Comments

Ping测试是一种常用的网络工具,用于检测主机之间的连接性。通常情况下,Ping测试会发送一个ICMP回显请求(Echo Request)到目标主机,并等待目标主机返回一个ICMP回显回答(Echo Reply)。根据回答的情况,可以判断目标主机的可达性。

然而,在使用批处理文件进行Ping测试时,可能会遇到一个问题,即错误级别(Errorlevel)的设置出现了困扰。根据实际测试情况,可以总结出以下几种情况:

1. 当Ping一个在子网内不可访问的地址时,会得到一个"unreachable"(不可达)的回答。发送了1个数据包,接收到了1个数据包,丢失了0个数据包。此时,错误级别未设置。

2. 当Ping一个在子网外不可访问的地址时,会得到一个"timeout"(超时)的回答。发送了1个数据包,接收到了0个数据包,丢失了1个数据包。此时,错误级别被设置为非零值。

3. 当Ping一个活动的主机时,可能会丢失数据包,并且错误级别会被设置。

4. 当Ping一个活动/不活动的主机时,可能会收到TTL(跳数限制)已过期的回答,并且不会设置错误级别。

为了解决错误级别的问题,可以通过检查Ping回答的内容来进行判断。下面是一个使用批处理文件进行Ping测试并检查错误级别的示例代码:

ping -n 1 192.168.1.1 | find "TTL=" >nul
if errorlevel 1 (
    echo 主机不可达
) else (
    echo 主机可达
)

以上代码将Ping一个IP地址为192.168.1.1的主机,并通过管道将结果传递给find命令,查找是否存在"TTL="的字符串。如果未找到该字符串,即Ping回答中没有TTL信息,则设置错误级别为1,表示主机不可达;否则,设置错误级别为0,表示主机可达。根据错误级别的不同,输出相应的结果。

通过这种方式,可以解决使用批处理文件进行Ping测试时错误级别的问题,实现更准确的判断和处理。

0