Windows CMD-如何在批处理文件中统计失败的ping

Windows CMD-如何在批处理文件中统计失败的ping,windows,batch-file,Windows,Batch File,我能够运行一个简单的批处理文件(感谢),它将ping an ip,如果成功,它将转到SUCCESS,如果失败,它将转到fails 然而,这适用于持续成功或持续失败,我希望它指向一个不稳定的连接,并且只有在超过50%(因此,>5)ping失败时才会转到失败。有没有办法做到这一点 @echo off ECHO Checking connection, please wait... PING -n 10 HOST_IP|find "Reply from" > NUL IF NOT ERRORLE

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

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

@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
感谢您使用ipv4

for/f%%a in('
ping-n 10 www.google.es^ find/c“TTL=”
“)如果%%a lss 5(回显失败)或其他情况(回显成功),则执行此操作”
这将使用
TTL=
字符串计算到达主机的数据包中的输出行数

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

for/f“tokens=2 delims=()”%%a in('ping-n 10 www.google.com'
)do for/f“tokens=1 delims=%%%”中的%%b(“%%a”
)如果%%b gtr 50(回波失败)或其他(回波成功),则执行此操作
为什么不为两个版本使用第二种方法?因为在ipv4 ping中,同一vlan中的非活动计算机不会丢失任何数据包。对于发送的每个数据包,您将从发送数据包的同一台机器接收数据包


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

不能这样做。ping将被阻止,在ping退出之前,如果没有,您将无法到达
行。你必须在一个循环中运行单个ping,然后在那里进行统计。我在想-我可以运行ping命令,在末尾的“Packets…”行中使用FIND/F,提取显示丢失的数据包的令牌,将其放入变量中,然后在第一个块结束时使用IF variable>5 goto…当然可以。但你必须先等10个包全部完成。您无法执行实时“我们是否已命中5个丢失的数据包”检查。您确实不应该使用Reply from,因为即使ping失败,您也可以从消息中获得回复。使用“TTL=”代替。更好的ish方法是(伪代码)
while(loss loss++}
type thing。执行单个数据包ping。检查是否丢失或成功,并更新计数器。一旦丢失率达到50%,就可以中止循环。