如何在批处理脚本中等待?

Tho*_*aaf 159 batch-file

我正在尝试编写一个批处理脚本,并尝试在两个函数调用之间等待10秒.命令:

sleep 10
Run Code Online (Sandbox Code Playgroud)

不使批处理文件等待10秒.

我正在运行Windows XP.

注意:这不是在批处理文件休眠的完全重复,因为另一个问题也是关于python,而这是关于Windows批处理文件.

cha*_*rit 263

您可以ping一个肯定不存在的地址并指定所需的超时:

ping 192.0.2.2 -n 1 -w 10000 > nul
Run Code Online (Sandbox Code Playgroud)

由于地址不存在,它将等待10,000毫秒(10秒)并返回.

  • -w 10000部件指定所需的超时(以毫秒为单位).
  • -n 1部分告诉ping它应该只尝试一次(通常它会尝试4次).
  • > nul部分附加这样的ping命令无法正常输出到屏幕上.

您可以通过在PATH中的某处创建sleep.bat并使用上述技术轻松地自己创建睡眠命令:

rem SLEEP.BAT - sleeps by the supplied number of seconds

@ping 192.0.2.2 -n 1 -w %1000 > nul
Run Code Online (Sandbox Code Playgroud)

注意: 192.0.2.x地址是根据RFC 3330保留的,因此它在现实世界中肯定不存在.引用规范:

192.0.2.0/24 - 该块被指定为"TEST-NET",用于文档和示例代码.它通常与供应商和协议文档中的域名example.com或example.net一起使用.此块中的地址不应出现在公共Internet上.

  • 黑客-2天才+3 (76认同)
  • 我添加了实际的功能,它叫做超时.. http://www.ss64.com/nt/timeout.html至少我知道其他人也不知道:) (15认同)
  • 不起作用,`ping`响应:`PING:传输失败.一般失败.可能是因为我在10.xxx范围内. (3认同)
  • ping 127.0.0.1 -n 5 -w 1000> nul hat这样做,因为另一个会立即完成. (2认同)
  • 我很高兴地使用“ping 0.0.0.0 -n 1 -w 10000 > nul”,直到 Windows 10 将立即返回此特定 IP,无需任何等待。`@ping 1.0.0.0 -n 1 -w 3000 > nul` 有效。 (2认同)

Gle*_*leb 136

你最好ping 127.0.0.1.Windows ping在ping之间暂停一秒钟,因此如果你想睡10秒钟,请使用

ping -n 11 127.0.0.1 > nul
Run Code Online (Sandbox Code Playgroud)

这样您就不必担心意外的早期返回(例如,没有默认路由,并且立即知道123.45.67.89无法访问.)

  • 我喜欢这个解决方案而不是标记为答案的解决方案,因为我们不需要确保我们的脚本具有不存在的IP地址.因此,我们可以编写一次脚本并在任何网络中的任何Windows系统上使用它,而无需再次编辑脚本. (24认同)
  • 或者使用localhost来避免仅限IPv6的计算机出现问题. (4认同)
  • 由于[RFC 3330](http://smakd.potaroo.net/ietf/idref/rfc3330/)已经过时,我正在使用此解决方案. (3认同)

Tho*_*aaf 124

我实际上找到了正确的命令..它叫做超时:http://www.ss64.com/nt/timeout.html

  • 也不是Windows XP命令...... (8认同)
  • 这可能不是2009年XP的正确答案,但它适用于Windows 7及更高版本! (7认同)
  • 既然WindowsXP即将推出,似乎这是将来实现这一目标的方式. (3认同)
  • 替代方法是 chakrits http://www.ss64.com/nt/sleep.html (2认同)
  • 在2016年,这应该成为正确的答案. (2认同)
  • 正如此处提到的 /sf/answers/117066281/,“超时 5”实际上会休眠 4 到 5 秒之间的任何时间。因此,“超时 1”可能会在半秒、10 毫秒等时间内完成。超时只是休眠,直到下一整秒到来。 (2认同)

小智 44

我用过这个

:top
cls
type G:\empty.txt
type I:\empty.txt
timeout /T 500
goto top
Run Code Online (Sandbox Code Playgroud)

  • `timeout`命令在Windows XP上不可用.它适用于Windows 2003和Windows 7. (8认同)
  • 秒?毫秒?分钟?它使用的单位是什么? (3认同)

小智 7

关于什么:

@echo off
set wait=%1
echo waiting %wait% s
echo wscript.sleep %wait%000 > wait.vbs
wscript.exe wait.vbs
del wait.vbs
Run Code Online (Sandbox Code Playgroud)

  • 即使对于<1000ms的延迟,这也是唯一准确的解决方案. (2认同)

eas*_*sel 6

嗯,sleep甚至存在于你的Windows XP盒子上?根据这篇文章:http ://malektips.com/xp_dos_0002.htmlsleep在Windows XP上不可用,您必须下载Windows 2003资源工具包才能获得它.

Chakrit的回答也为你提供了另一种停顿方式.

尝试sleep 10从命令提示符运行.