如何在批处理脚本中等待? [复制]
Posted
技术标签:
【中文标题】如何在批处理脚本中等待? [复制]【英文标题】:How to wait in a batch script? [duplicate] 【发布时间】:2010-10-18 15:06:01 【问题描述】:我正在尝试编写批处理脚本并尝试在 2 个函数调用之间等待 10 秒。命令:
sleep 10
不让批处理文件等待 10 秒。
我正在运行 Windows XP。
注意:这不是 Sleeping in a batch file 的完整副本,因为另一个问题也是关于 python,而这是关于 windows 批处理文件。
【问题讨论】:
相关帖子 - Windows batch: sleep 【参考方案1】:您可以 ping 一个不存在的地址并指定所需的超时时间:
ping 192.0.2.2 -n 1 -w 10000 > nul
由于地址不存在,它会等待 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
注意(2002 年 9 月): 192.0.2.x 地址根据RFC 3330 保留,因此它在现实世界中绝对不存在。引用规范:
192.0.2.0/24 - 此块被分配为“TEST-NET”以用于 文档和示例代码。它经常与 供应商和协议中的域名 example.com 或 example.net 文档。此块内的地址不应出现在 公共互联网。
【讨论】:
Hack -2 Genius +3 ping 127.0.0.1 -n 5 -w 1000 > nul hat 这样做,因为另一个会立即完成。 我添加了称为超时的实际函数。ss64.com/nt/timeout.html 至少我知道其他人也不知道 :) 不起作用,ping
回复:PING: transmit failed. General failure.
可能是因为我在 10.x.x.x 范围内。
我很高兴使用ping 0.0.0.0 -n 1 -w 10000 > nul
,直到 Windows 10 将立即返回此特定 IP,无需任何等待。 @ping 1.0.0.0 -n 1 -w 3000 > nul
工作。【参考方案2】:
那么,sleep
甚至存在于您的 Windows XP 机器上吗?根据这篇文章:http://malektips.com/xp_dos_0002.html sleep
在 Windows XP 上不可用,您必须下载 Windows 2003 Resource Kit 才能获得它。
Chakrit 的回答也为您提供了另一种暂停方式。
尝试从命令提示符运行sleep 10
。
【讨论】:
【参考方案3】:你最好ping 127.0.0.1。 Windows ping 在 ping 之间会暂停一秒钟,因此如果您想睡 10 秒,请使用
ping -n 11 127.0.0.1 > nul
这样您就不必担心意外的提前返回(例如,没有默认路由,并且 123.45.67.89 立即已知无法访问。)
【讨论】:
我更喜欢这个解决方案,而不是标记为答案的那个,因为这样更简洁,因为我们不必确保我们的脚本有一个不存在的 IP 地址。因此,我们可以编写一次脚本,并在任何网络中的任何 Windows 系统上使用它,而无需再次编辑脚本。 自从RFC 3330 被淘汰后,我正在使用这个解决方案。 或者使用 localhost 来避免在纯 IPv6 机器上出现问题。【参考方案4】:我实际上找到了正确的命令来使用.. 它称为超时:http://www.ss64.com/nt/timeout.html
【讨论】:
另一种选择是 chakrits ss64.com/nt/sleep.html 也不是 Windows XP 命令... 现在 WindowsXP 即将淘汰,看来这确实是未来的方式。 这可能不是 2009 年 XP 的正确答案,但它适用于 Windows 7 及更高版本! 2016年,这应该会成为正确答案。【参考方案5】:我用过这个
:top
cls
type G:\empty.txt
type I:\empty.txt
timeout /T 500
goto top
【讨论】:
超时是很好的解决方案。它实际上比睡觉更好。它告诉剩余时间!timeout
命令在 Windows XP 上不可用。它可以在 Windows 2003 和 Windows 7 上运行。
秒?毫秒?分钟?它使用的单位是什么?
@ItayLevin:单位是秒。【参考方案6】:
怎么样:
@echo off
set wait=%1
echo waiting %wait% s
echo wscript.sleep %wait%000 > wait.vbs
wscript.exe wait.vbs
del wait.vbs
【讨论】:
这是唯一一个似乎准确的解决方案,即使对于<1000ms
的延迟也是如此。以上是关于如何在批处理脚本中等待? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将当前连接的 wifi 网络的 SSID 分配给批处理脚本中的变量? [复制]