在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不起作用。
答案 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.