使用 findstr 获取丢包的更好方法,批量
Better way to use findstr to get packet loss, batch
希望使用 findstr 在 ping 命令后找到“0% 损失”。
也许是一系列高达“50% 损失”的东西。
这是为了检查并确保在启动在线内容之前 100% 建立互联网连接。
目前结构化:
ping %ip% -n 3 -w 3000 | findstr "0% loss"
pause
goto Starting
它目前正在忽略 findstr 并且无论如何它都拒绝找到我正在寻找的东西
理想情况下它会像这样流动:
ping %ip% -n 3 -w 3000 | findstr "0% loss" || goto Echo
pause
goto Starting
:echo
Could not find "0% loss"
pause
我试过了,它会回显,但即使是 100% 的连接,所以它显然没有按照我想要的方式运行。
是否有更好的方法来查找丢包率?
或
如果设备完全离线时 ping 不起作用,是否有更好的方法来测试互联网连接。
您要查找的搜索字符串太宽泛。当您检查 findstr 是否有“0% 损失”时,您也会无意中获得“100% 损失”。幸运的是,ping
将丢包放在括号中,因此您可以简单地将左括号包含在搜索字符串中。
@echo off
title Restart
color 0A
cls
:start
Cls
set ip=www.google.com
:Pingcheck
echo Checking ping..
timeout /t 3
ping %ip% -n 5 -w 3000 | findstr /C:"(0% loss" || goto Loss
pause
:NoLoss
echo We found 0 packet loss, at %ip% on %date% at %time%
pause
goto start
:Loss
echo We found some packet loss.
pause
我还更改了 :Echo
标签的名称,因为 echo
已经是一个命令,将它也作为标签会造成混淆。
您还可以使用 wmi 检查 ping 状态。此方法的优点是它会在第一次失败时 goto :fail
,并且不会继续完成 5 次 ping 尝试的失败原因,同时还提供了一种保持平均响应时间的简单方法。它使用 set /a
检查 wmi 查询的结果是否包含数值。如果是,则通过。如果不是,则失败。
@echo off & setlocal
set "host=www.google.com"
echo Pinging %host%...
for /L %%I in (1,1,5) do (
for /f "delims=" %%x in (
'wmic path win32_pingstatus where "address='%host%' and timeout=3000"^
get ResponseTime /value ^| find "="'
) do (
2>NUL set /a "%%x, avg += ResponseTime" || goto fail
)
)
set /a "avg /= 5"
echo 0%% packet loss. Woo. Average response time was %avg%ms.
exit /b
:fail
echo Aw snap. Packet loss.
希望使用 findstr 在 ping 命令后找到“0% 损失”。 也许是一系列高达“50% 损失”的东西。
这是为了检查并确保在启动在线内容之前 100% 建立互联网连接。
目前结构化:
ping %ip% -n 3 -w 3000 | findstr "0% loss"
pause
goto Starting
它目前正在忽略 findstr 并且无论如何它都拒绝找到我正在寻找的东西
理想情况下它会像这样流动:
ping %ip% -n 3 -w 3000 | findstr "0% loss" || goto Echo
pause
goto Starting
:echo
Could not find "0% loss"
pause
我试过了,它会回显,但即使是 100% 的连接,所以它显然没有按照我想要的方式运行。
是否有更好的方法来查找丢包率?
或
如果设备完全离线时 ping 不起作用,是否有更好的方法来测试互联网连接。
您要查找的搜索字符串太宽泛。当您检查 findstr 是否有“0% 损失”时,您也会无意中获得“100% 损失”。幸运的是,ping
将丢包放在括号中,因此您可以简单地将左括号包含在搜索字符串中。
@echo off
title Restart
color 0A
cls
:start
Cls
set ip=www.google.com
:Pingcheck
echo Checking ping..
timeout /t 3
ping %ip% -n 5 -w 3000 | findstr /C:"(0% loss" || goto Loss
pause
:NoLoss
echo We found 0 packet loss, at %ip% on %date% at %time%
pause
goto start
:Loss
echo We found some packet loss.
pause
我还更改了 :Echo
标签的名称,因为 echo
已经是一个命令,将它也作为标签会造成混淆。
您还可以使用 wmi 检查 ping 状态。此方法的优点是它会在第一次失败时 goto :fail
,并且不会继续完成 5 次 ping 尝试的失败原因,同时还提供了一种保持平均响应时间的简单方法。它使用 set /a
检查 wmi 查询的结果是否包含数值。如果是,则通过。如果不是,则失败。
@echo off & setlocal
set "host=www.google.com"
echo Pinging %host%...
for /L %%I in (1,1,5) do (
for /f "delims=" %%x in (
'wmic path win32_pingstatus where "address='%host%' and timeout=3000"^
get ResponseTime /value ^| find "="'
) do (
2>NUL set /a "%%x, avg += ResponseTime" || goto fail
)
)
set /a "avg /= 5"
echo 0%% packet loss. Woo. Average response time was %avg%ms.
exit /b
:fail
echo Aw snap. Packet loss.