题 如何在批处理文件中睡觉?


如何在命令和下一个命令之间的Windows批处理文件中暂停执行一段时间?


114
2017-09-26 19:45




这是否有意成为规范?如果是这样,那么一些解释性文字可能是合适 - John Gardeniers
“解释性文字”如何? - Massimo
我见过的大多数(如果不是全部)规范性问题都包含描述该问题意图的文本。 - John Gardeniers
或者一些文字解释情况......这主要是为了帮助SEO,但也有助于构建潜在的答案。 - Chris S
SEO工作得很好。在谷歌搜索上第一次打我。 - jbo5112


答案:


在批处理文件中睡眠的正确方法是使用 timeout 命令,在Windows 2000中引入。

等待 介于29到30秒之间

timeout /t 30

如果用户点击任何键,超时将被中断;但是,该命令也接受可选开关 /nobreak,有效地忽略了用户可能按下的任何内容,除了明确的 CTRL-C

timeout /t 30 /nobreak

此外,如果您不希望命令在屏幕上打印倒计时,您可以将其输出重定向到 NUL

timeout /t 30 /nobreak > NUL

173
2017-09-26 19:45



即使安装了2003资源工具包,并且sleep命令在Windows 7中不起作用,timeout命令也不能与Windows XP一起使用,因此如果在Win7和WinXP上使用批处理文件,ping命令仍然可以很好地使用。
超时在非交互式脚本中不起作用:“错误:不支持输入重定向,立即退出进程。”所以有时使用带有“ping”的hack是首选。 - iMysak


因为它也在这里适用,我会复制 我从另一个网站回答

如果你想使用ping,有一种更好的方法。您需要ping不存在的地址,因此您可以指定毫秒精度的超时。幸运的是,这样的地址是在标准(RFC 3330)中定义的,它是 192.0.2.x。这不是弥补,它实际上是一个地址,其唯一目的是不存在(可能不太清楚,但它甚至适用于本地网络):

192.0.2.0/24 - 此块被指定为“TEST-NET”以供使用      文档和示例代码。它经常与之配合使用      供应商和协议中的域名example.com或example.net      文档。此块中的地址不应出现在      公共互联网。

要睡眠123毫秒,请使用 ping 192.0.2.1 -n 1 -w 123 >nul


8
2017-07-17 10:58



请不要这样做,即使它是 略 比ping一个真正的地址更好。 Ping 就是这个 错误 工作的工具。 - Massimo
@Massimo很可能不是它打算做的:)但我认为它仍然是一个很好的解决方案 - 它在某些情况下(特别是更高的分辨率)确实比超时更好。此外,它已经广为人知,因此大多数人在批处理文件中看到它时不会感到非常惊讶(即困惑)。 - mafu
此QA已创建 究竟 指出问题的正确解决方案,因为还有其他几个类似的问题,通过“只使用ping”或类似的kludges回答。 - Massimo
@Massimo好吧!我想我们只是有不同的看法。如果你不介意我仍然会留下这个答案,因为它似乎比ping通常更好。 - mafu
timeout是适用于其运行的操作系统的正确解决方案。 ping是唯一适用于5.1-6.3的解决方案。 25%的系统仍处于5.1,超时不是“正确的方式”。 - Wyrmwood


您还可以将ping插入localhost。这将需要4秒钟才能完成(默认情况下)。它被一些人认为是一种kludge,但是效果非常好。

命令:
    ping 127.0.0.1


5
2017-09-26 20:10



嗯......这个Q / A的全部目的是 究竟 纠正另外两个问题,将其作为已接受的答案,但由于他们的OP不再存在,因此无法再予以纠正。 - Massimo
虽然它可以工作,但相当于用锤子驱动螺丝。错误的工具可能会起作用,但它仍然是错误的。 - voretaq7
@MarkAllen换句话说,Windows NT4,95,98,ME和更老? - Chris McKeown
@MarkAllen - 从技术上讲,你必须担心是否 ping 随你的操作系统。如果你对'95 '98或我足够担心那么你应该同样担心6.22没有 ping 或 - Mark Henderson♦
@MarkHenderson记住操作系统的特定版本是否支持TCP / IP比记住它是否包含我以前没有听过的命令更容易(对我来说)。你懂? - Mark Allen