CMD - 如何计算批处理文件中的失败ping

时间:2015-02-24 18:40:04

标签: windows batch-file

我能够运行一个简单的批处理文件(感谢here),它将ping一个ip,如果成功,它将转到SUCCESS,如果失败,它将转到FAILS。

然而,这适用于持续成功或持续失败,我希望它指向不稳定的连接,并且只有超过50%(因此,> 5)ping失败才会转到FAILS。有没有办法做到这一点?

@echo off
ECHO Checking connection, please wait...
PING -n 10 HOST_IP|find "Reply from" > NUL
IF NOT ERRORLEVEL 1 goto :SUCCESS
IF     ERRORLEVEL 1 goto :FAILS

:FAILS
Echo FAIL!
@echo off

:SUCCESS
Echo Success!
@echo off

由于

1 个答案:

答案 0 :(得分:0)

对于ipv4,您可以使用

for /f %%a in ('
    ping -n 10 www.google.es ^| find /c "TTL="
') do if %%a lss 5 ( echo Fail ) else ( echo Sucess )

将计算带有TTL=字符串的输出行数,该字符串将出现在到达主机的数据包中。

但是ipv6在其输出中不包含TTL,因此,我们可以直接检索百分比损失

for /f "tokens=2 delims=()" %%a in ('ping -n 10 www.google.com'
) do for /f "tokens=1 delims=%%" %%b in ("%%a"
) do if %%b gtr 50 ( echo Fail ) else ( echo Sucess )

为什么不在两个版本中使用第二种方法?因为在ipv4中ping同一个vlan中的非活动机器不会丢失任何数据包。对于发送的每个数据包,您将从发送它的同一台计算机上收到一个数据包。

您可以在批处理文件中找到有关ping行为和用法的更多信息here