timeout /t 10 /nobreak > NUL 卡住并且无法在 Windows 2003 服务器 VM 上执行下一个语句



"timeout/t 10/nobreak> NUL">卡住了,无法执行下一条语句。 我编写了以下脚本,该脚本在我的开发机器上按预期执行,并在少数测试机器上进行了测试。它等待 10 秒,然后再次开始执行(也在安全模式下测试(,但是在其中一台许可证已过期的机器 Windows 2003 服务器上,我的脚本以安全模式运行,但在执行上述超时语句时,它不会执行下一条语句。

有人可以告诉我原因(如果有(以及解决方案是什么吗?


set restart=1
...
... some other code
...
setlocal ENABLEDELAYEDEXPANSION
:WaitToRestart
if "%restart%"=="1" (
echo waiting for restart >> log.txt
shutdown /r /t 0
if "!errorlevel!" NEQ "0" (
echo error: !errorlevel! while restarting so wait for 10 sec >> log.txt
timeout /t 10 /nobreak > NUL
goto WaitToRestart
)
echo error: !errorlevel! you shuld not be here to see after death >> log.txt
)
setlocal DisableDelayedExpansion

在我的开发机器上,此脚本运行良好(Windows 10(,但卡在Windows 2003上的生产环境中(它作为启动脚本运行,在安全模式下启动后运行(。

所以我用命令"PING localhost -n 6>NUL"更改了"超时"命令,但它在旋转 10、12 次后也卡住了。当我删除"PING"命令时,它会旋转很长时间,直到命令"关闭"成功执行。

它看起来像特定于计算机的问题,并且可能由于许可证过期问题而停止,因为我已从物理机备份创建了VM

如果你只是想获取一个等待函数,你可以操纵ping来做到这一点。

ping 0 -w 1000 -n 10 >nul

将其逐个分解,cmd0扩展到0.0.0.0,这是 cmd 将尝试 ping 的 IP 地址(它不存在(。-w指定在请求超时之前等待ping毫秒数。-n指定要发送的请求数(因此您的总持续时间(以秒为单位(为w/1000 * n(。>nul不是特定于ping的;它将输出到控制台无效。

通过 ping 不存在的 IP,您可以强制ping在每个请求时超时,从而获得可靠的等待时间。

相关内容

最新更新