我能够运行一个简单的批处理文件(感谢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
由于
答案 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。