如何在命令和下一个命令之间的Windows批处理文件中暂停执行一段时间?
如何在命令和下一个命令之间的Windows批处理文件中暂停执行一段时间?
Answers:
在批处理文件中进行睡眠的正确方法是使用timeout
Windows 2000中引入的命令。
timeout /t 30
如果用户按下任何键,超时将被中断;但是,该命令还接受可选的switch /nobreak
,它有效地忽略了用户可能按下的任何命令,但显式的除外CTRL-C
:
timeout /t 30 /nobreak
另外,如果您不希望该命令在屏幕上显示其倒数,则可以将其输出重定向到NUL
:
timeout /t 30 /nobreak > NUL
如果要使用ping,则有更好的方法。您需要对不存在的地址执行ping操作,因此可以指定毫秒精度的超时时间。幸运的是,这样的地址是在标准(RFC 3330)中定义的,并且是192.0.2.x
。这不是伪造的,它实际上是一个不存在的唯一目的的地址(可能不清楚,但即使在本地网络中也适用):
192.0.2.0/24-此块分配为“ TEST-NET”,用于文档和示例代码。它通常与供应商和协议文档中的域名example.com或example.net结合使用。此块中的地址不应出现在公共Internet上。
要睡眠123毫秒,请使用 ping 192.0.2.1 -n 1 -w 123 >nul
Ping
仅仅是工作的错误工具。
您还可以将ping插入localhost。这将需要4秒钟完成(默认情况下)。某些人认为它是垃圾,但效果却很好。
命令:
ping 127.0.0.1
ping
您的操作系统是否随附。如果你担心有足够的了解'95 '98或ME,那么你应该为同样担心的6.22哪些没有被ping
任何
免责声明:这不是“理想”的解决方案,所以不要像推荐那些人那样打扰我ping
。
如果可能,请timeout
确保使用。但是,正如评论中指出的那样,这并不总是一种选择(例如,在非交互模式下)。在那之后,我同意ping
“纠缠”也许是次之,因为它非常简单。也就是说,我提供了另一个选择...嵌入一些VB脚本。
该解决方案的基础除此以外还有各种应用。VBS通常可以执行批处理无法完成的事情,或者至少可以更轻松地完成批处理。使用此处说明的技术,您可以将两者混合(不是“无缝”,而是“功能上” ...)。
这是一个班轮,创建临时脚本,执行它,然后将其删除。该脚本为您执行睡眠操作(在此示例中为3秒)。
echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs
这基本上是同一件事,但写法有所不同:
set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%
最后,像一样ping
,CScript
本身具有超时选项!因此,如果您在脚本中输入无限循环,则可以让解释器强制执行持续时间。请注意,这是一个“忙碌”的操作,它占用了CPU,因此在您可以使用该WScript.Sleep
过程时不建议这样做,但是出于完整性考虑,我将其作为概念性选项提供:
set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%