为什么这个 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
为空的情况。
我写了一个简单的 .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
为空的情况。