在批处理文件中休眠
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。
【讨论】:
以上是关于在批处理文件中休眠的主要内容,如果未能解决你的问题,请参考以下文章