如何在批处理脚本中等待? [复制]

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 分配给批处理脚本中的变量? [复制]

如何编写 Windows 批处理脚本以从目录中复制最新文件?

在 shell 脚本中执行的批处理文件不等待用户输入

根据名称复制文件的批处理脚本