【发布时间】:2021-09-30 23:13:10
【问题描述】:
我编写了一个简单的 .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)。
问题是我希望这段代码无限期地运行,直到用户会话结束(关闭/注销),但代码似乎在约 350 次执行(约 30 分钟)后自行停止)。这有什么原因吗,是否可以绕过/解决这个问题,使代码可以无限期运行?
附:完全意识到这可能是写得很糟糕的代码,因此欢迎任何反馈/改进。
谢谢
【问题讨论】:
-
对服务器进行 Ping 仅提供了将消息跳到该特定服务器并可能从该特定服务器接收响应所用时间的指示。它不会为您提供网络健康状况的任何指示。
-
我已经运行你的脚本一个小时了,它仍然可以正常工作。尝试从命令行运行您的脚本,而不是双击该脚本,然后查看您收到的错误消息。
标签: batch-file cmd windows-10 ping