在批处理文件中休眠

165

当编写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的调用,传入要睡眠的秒数。

显然,Windows 2003资源工具包提供了类Unix的sleep命令(终于有了!)。与此同时,对于那些仍在使用Windows XP、Windows 2000或(遗憾地)Windows NT的人来说,是否有更好的方法呢?

我修改了sleep.py脚本中被接受的答案,以便如果没有在命令行上传递任何参数,则默认为一秒钟:

import time, sys

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

微软的下载页面显示Windows 2003资源工具包也适用于XP。 恐怕没有其他选择,只能使用“外部”实用程序来进行等待:XP命令处理器中没有类似的功能。 - GerG
请查看以下两个链接,了解如何在批处理文件中实现等待命令和睡眠命令: - Wael Dalloul
2
你有几个选项 - 使用 ping 命令模拟睡眠,或下载包含 sleep 命令的 Windows 资源工具包。更多详情请参见:批处理文件 SLEEP 命令 - Rudu
http://stackoverflow.com/questions/5437201/how-to-wait-in-a-batch-script/5822491 http://stackoverflow.com/questions/1304738/wait-in-console https://dev59.com/OG445IYBdhLWcg3wWI-L https://dev59.com/23VC5IYBdhLWcg3w2k-I - Chris Moschini
批处理文件停止各种技术的良好总结:https://www.robvanderwoude.com/wait.php - user1934286
显示剩余5条评论
34个回答

0
这是在 Windows XP SP3 和 Windows 7 上测试过的,使用 CScript。我加入了一些安全保护来避免出现 del“”提示。(/q会很危险)
等待一秒钟:

sleepOrDelayExecution 1000

等待500毫秒,然后运行其他内容:
sleepOrDelayExecution 500 dir \ /s

sleepOrDelayExecution.bat:

@echo off
if "%1" == "" goto end
if NOT %1 GTR 0 goto end
setlocal
set sleepfn="%temp%\sleep%random%.vbs"
echo WScript.Sleep(%1) >%sleepfn%
if NOT %sleepfn% == "" if NOT EXIST %sleepfn% goto end
cscript %sleepfn% >nul
if NOT %sleepfn% == "" if EXIST %sleepfn% del %sleepfn%
for /f "usebackq tokens=1*" %%i in (`echo %*`) DO @ set params=%%j
%params%
:end

0
使用timeout 例如- timeout 10将在执行cmdpowershell中的下一个命令之前等待10秒钟。

这是相同的答案,但细节较少,与 Blorgbeard 的 得票最高的答案 相同,并且该答案已经超过十年了。 - jeb

0

既然其他人建议使用第三方程序(如Python、Perl、自定义应用程序等),那么另一个选择是在http://gnuwin32.sourceforge.net/packages/coreutils.htm下载适用于Windows的GNU CoreUtils。

有两个部署选项:

  1. 安装完整软件包(包括CoreUtils套件、依赖项、文档等)。
  2. 只安装“sleep.exe”二进制文件和必要的依赖项(使用depends.exe获取依赖信息)。

部署CoreUtils的一个好处是,您还将获得许多有用的脚本程序(Windows批处理程序仍有很多不足之处)。


-2
ping -n X 127.0.0.1 > nul

将X替换为秒数+1。

例如,如果您要等待10秒钟,请将X替换为11。要等待5秒钟,请使用6。

有关毫秒的更早答案,请阅读之前的回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接