"timeout /t 10 /nobreak > NUL"被卡住了,无法执行下一条语句。我编写了下面的脚本,它按预期在我的dev机器上执行,并且也在少数测试机器上进行了测试。它等待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
在我的dev机器上,这个脚本运行良好(windows 10),但它停留在Windows 2003上的生产环境(在生产环境中,它作为启动脚本运行,在安全模式下启动后运行)。
因此,我用命令"PING localhost -n 6 >NUL“来更改"timeout”命令,但它在旋转10、12次之后也会卡住。当我删除"PING“命令时,它会旋转很长一段时间,直到命令”关机“成功执行为止。
它看起来像是特定于机器的问题,并且可能因为许可证过期问题而停止,因为我已经从物理机器的备份中创建了VM。
发布于 2019-12-04 00:59:27
如果您只是想获得一个等待函数,您可以操纵ping
来完成这个任务。
ping 0 -w 1000 -n 10 >nul
cmd将0
扩展为0.0.0.0
,即IP地址cmd将尝试ping (它不存在)。-w
指定ping
在超时请求之前等待的毫秒数。-n
指定要发送多少请求(因此您的总持续时间(以秒为单位)是w/1000 * n
)。>nul
不是ping
-specific;它使输出无效到控制台。
通过敲击不存在的IP,可以强制ping
对每个请求进行超时,从而为您提供可靠的等待时间。
https://stackoverflow.com/questions/59155060
复制相似问题