在批处理文件中休眠

Posted

技术标签:

【中文标题】在批处理文件中休眠【英文标题】:Sleeping in a batch file 【发布时间】:2010-09-15 00:40:32 【问题描述】:

在编写批处理文件以在 Windows 机器上自动执行某些操作时,我需要暂停其执行几秒钟(通常在测试/等待循环中,等待进程启动)。当时,我能找到的最佳解决方案是使用 ping (我不骗你)来达到预期的效果。我发现了一个更好的写法here,它描述了一个可调用的“wait.bat”,实现如下:

@ping 127.0.0.1 -n 2 -w 1000 > nul
@ping 127.0.0.1 -n %1% -w 1000> nul

然后,您可以在自己的批处理文件中包含对 wait.bat 的调用,并传入休眠的秒数。

Apparently the Windows 2003 Resource Kit provides a Unix-like sleep command(终于!)。同时,对于我们这些仍在使用 Windows XP、Windows 2000 或(可悲)Windows NT 的人,有没有更好的方法?

我修改了accepted answer中的sleep.py脚本,这样如果命令行没有传入参数就默认为一秒:

import time, sys

time.sleep(float(sys.argv[1]) if len(sys.argv) > 1 else 1)

【问题讨论】:

Windows 2003 Resource Kit 的 Microsoft download page 表明它也适用于 XP。恐怕除了使用“外部”实用程序来等待之外别无选择:XP 命令处理器中没有内置这样的功能。 2003 服务器资源工具包适用于 Windows XP(也可能适用于 w2k) 我过去也遇到过同样的问题,我自己也用过 ping (上面的注释清楚地表明我意识到这是愚蠢的:))。 检查:Implementing the WAIT Command in a Batch File Batch file SLEEP Command 您有两个选择 - 使用 ping 命令模拟睡眠,或下载包含 sleep 命令的 Windows 资源工具包。更多细节在这里:Batch file SLEEP Command 【参考方案1】:

只是为了好玩,如果你安装了 Node.js,你可以使用

node -e 'setTimeout(a => a, 5000)'

睡眠 5 秒。它适用于带有 Node v12.14.0 的 Mac。

【讨论】:

还有一个使用await的版本:node --input-type=module -e "await new Promise(resolve=>setTimeout(resolve, 5000))"(是的,OP的更好,哈哈)【参考方案2】:

有很多方法可以在 cmd/batch 中完成“sleep”:

我最喜欢的一个:

TIMEOUT /NOBREAK 5 >NUL 2>NUL

这将使控制台停止 5 秒钟,没有任何输出。

最常用:

ping localhost -n 5 >NUL 2>NUL

这将尝试连接到localhost 5 次。由于它托管在您的计算机上,因此它将始终到达主机,因此每秒它都会尝试新的每秒。 -n 标志指示脚本将尝试连接多少次。在本例中为 5,因此将持续 5 秒。

最后一个的变种:

ping 1.1.1.1 -n 5 >nul

在此脚本中,与上一个脚本相比存在一些差异。这不会尝试调用localhost。相反,它会尝试连接到1.1.1.1,一个非常快的网站。仅当您有活动的互联网连接时,该操作才会持续 5 秒。否则它将持续大约 15 来完成操作。我不建议使用这种方法。

ping 127.0.0.1 -n 5 >nul

这与示例 2 完全相同(最常用)。此外,您还可以使用:

ping [::1] -n 5 >nul

改为使用 IPv6 的 localhost 版本。

有很多方法可以执行此操作。但是,对于 Windows Vista 及更高版本,我更喜欢方法 1,而对于早期版本的操作系统,我更喜欢方法 1。

【讨论】:

以上是关于在批处理文件中休眠的主要内容,如果未能解决你的问题,请参考以下文章

在线程池中休眠的线程

在执行过程中休眠一个线程

在 JavaScript 中休眠 - 动作之间的延迟

在 Swift 中休眠或延迟 Timer 线程

在 Informix SPL 过程中休眠

为啥要在 bash 中休眠和等待?