更好的方法来使用findstr来获取数据包丢失,批处理

时间:2017-07-23 01:30:55

标签: batch-file ping findstr

在ping命令之后,希望使用findstr使其找到“0%丢失”。 也许是一系列高达“50%损失”的东西。

这是用于检查并确保在线启动之前100%建立与互联网的连接。

目前它的结构是:

 import os

file_path = os.path.abspath(os.getcwd())+"\database.db"

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+file_path
 db = SQLAlchemy(app)

它目前无视findtr,无论它拒绝找到我正在寻找的东西

理想情况下,它会像:

ping %ip% -n 3 -w 3000 | findstr "0% loss"
pause
goto Starting

我已经尝试过,它会回应,但即使是100%的连接,所以显然只是没有按照我喜欢的方式操作。

有没有更好的方法来查找%数据包丢失?

或者

有没有更好的方法来测试互联网连接,因为当设备完全脱机时ping不起作用。

2 个答案:

答案 0 :(得分:4)

您要查找的搜索字符串过于宽泛。当您检查findstr为“0%损失”时,您也无意中拾取了“10 0%损失”。幸运的是,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已经是一个命令,并且它也是一个标签会让人感到困惑。

答案 1 :(得分:2)

您还可以使用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.