为什么这个 CMD .bat 文件停止了?

Why is this CMD .bat file stopping?

我写了一个简单的 .bat 文件来监控我的 PC 和 Google 之间的 ping(试图大致监控网络的健康状况,并记录任何掉线)。

以下内容位于名为 Pingtest.bat

的文件中
@ECHO OFF

:LOOPSTART

FOR /F "tokens=* USEBACKQ" %%i IN ('%DATE:~0% %TIME:~0,8%') DO (SET "TIMED=%%i")

FOR /F "tokens=* USEBACKQ" %%g IN (`ping -n 1 -w 10000 www.google.co.uk`) do (SET "PING=%%g")
FOR /F "tokens=3 delims=," %%a in ("%PING%") do (set AVG_PING=%%a)
SET AVG_PING=%AVG_PING:~11,-2%

set /a varCheck=%AVG_PING%
IF %VarCheck%==%AVG_PING% (goto :OUTPUT) else (goto :ERROR)
:ERROR
SET AVG_PING=ERROR

:OUTPUT
SET OUTPUT=%TIMED% %AVG_PING%

echo %OUTPUT% >> Pingtest.txt
set "TIMED="
set "PING="
set "AVG_PING="
set "varCheck="

timeout /t 5 /nobreak > NUL

GOTO LOOPSTART

每 5 秒输出一个时间戳和以毫秒为单位的 ping 结果(例如 23/07/2021 23:35:40 15)并将其附加到 Pingtest.txt 文件。 应该运行无限期。

此 .bat 文件通过 .vbs 文件执行,该文件在启动时静默执行 .bat (code from this post)。

问题 是我希望此代码无限期地 运行 直到用户会话结束 (shutdown/logoff),但代码似乎停止在约 350 次执行(约 30 分钟)后自行执行。这有什么原因吗,可以通过 bypassed/resolved 这样代码可以无限期地 运行 吗?

P.S。充分意识到这可能是写得很糟糕的代码,所以对任何 feedback/improvements.

开放

谢谢

IF %VarCheck%==%AVG_PING% (goto :OUTPUT) else (goto :ERROR)

这是问题的核心。如果 DNS 查找或 ping 完全失败,VarCheck 最终为空,则此行将被无意义地解析,最终结果是批处理文件的其余部分将被忽略。将其更改为:

IF [%VarCheck%]==[%AVG_PING%] (goto :OUTPUT) else (goto :ERROR)

将处理 VarCheck 为空的情况。