如何在批处理文件中睡觉?

Mas*_*imo 167 windows batch-file batch

如何在命令和下一个命令之间的 Windows 批处理文件中暂停执行一段时间?

Mas*_*imo 245

在批处理文件中休眠的正确方法是使用timeoutWindows 2000 中引入的命令。

等待29 到 30 秒之间的某个时间

timeout /t 30
Run Code Online (Sandbox Code Playgroud)

如果用户按下任何键,超时将被中断;然而,该命令也接受可选的 switch /nobreak,它有效地忽略用户可能按下的任何东西,除了明确的CTRL-C

timeout /t 30 /nobreak
Run Code Online (Sandbox Code Playgroud)

此外,如果您不希望该命令在屏幕上打印其倒计时,您可以将其输出重定向到NUL

timeout /t 30 /nobreak > NUL
Run Code Online (Sandbox Code Playgroud)

  • timeout 在非交互式脚本中不起作用:“错误:不支持输入重定向,立即退出进程。” 所以有时使用带有“ping”的 hack 是首选。 (20认同)
  • 即使安装了 2003 Resource kit, timeout 命令也不适用于 Windows XP,并且 sleep 命令在 Windows 7 中也不起作用,因此如果您在 Win7 和 WinXP 上使用批处理文件,ping 命令仍然可以很好地使用。 (6认同)
  • 作为记录,如果标准输入关闭,此命令将立即退出! (2认同)

maf*_*afu 23

由于它也适用于此,我将从另一个站点复制我的答案

如果要使用 ping,还有更好的方法。您需要 ping 一个不存在的地址,因此您可以指定毫秒精度的超时。幸运的是,这样的地址是在标准 (RFC 3330) 中定义的,它是192.0.2.x. 这不是虚构的,它确实是一个唯一目的不存在的地址(可能不清楚,但它甚至适用于本地网络):

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

要休眠 123 毫秒,请使用 ping 192.0.2.1 -n 1 -w 123 >nul

  • timeout 是其工作的操作系统的正确解决方案。ping 是唯一适用于 5.1-6.3 的解决方案。由于 25% 的系统仍然使用 5.1,超时不是“正确的方法”。 (9认同)
  • @Massimo这很可能不是它想要做的:)但我认为这仍然是一个很好的解决方案 - 在某些情况下(特别是更高分辨率)它确实比超时更好。此外,它已经变得众所周知,因此大多数人在批处理文件中看到它时不会感到非常惊讶(即困惑)。 (4认同)
  • timeout 对于任何操作系统来说都是错误的解决方案,因为即使在 Windows 10 中它也会被严重破坏。仅仅因为输入被重定向而失败的命令有什么用? (4认同)
  • 请不要那样做,即使它比 ping 真实地址*稍微*好一点。`Ping` 只是这个工作的*错误* 工具。 (3认同)
  • 保持这种状态的原因之一是许多人在脚本中使用 ping。读完它后,我很困惑为什么要这样做,但这个答案说明了原因。 (3认同)
  • @Massimo 好的!我想我们只是有不同的看法。如果您不介意,我仍然会保留这个答案,因为它似乎比最常描述的 ping localhost n 次要好。 (2认同)

小智 8

您也可以ping在 localhost 中插入一个。这将需要 4 秒才能完成(默认情况下)。它被一些人认为是杂七杂八的,但同样有效。

命令:

ping 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

  • 嗯......这个问答的全部目的是*完全*纠正其他两个问题,这些问题将其作为他们接受的答案,但无法再纠正,因为他们的 OP 不再存在。 (6认同)
  • 虽然它会起作用,但它相当于用锤子驱动螺丝。错误的工具可能会起作用,但它仍然是错误的。 (6认同)
  • @MarkAllen - 从技术上讲,您必须担心您的操作系统是否带有“ping”。如果您对 '95 '98 或 ME 足够担心,那么您应该同样担心 6.22,它也没有`ping` (5认同)
  • @MarkHenderson(对我而言)记住操作系统的特定版本是否支持 TCP/IP 比记住它是否包含我以前没有听说过的命令更容易。你懂? (4认同)
  • @Massimo 称之为小鸭子综合症。哦 - 我刚刚看到你上面的评论。你甚至没有把这个当成一个真正的问题来问,你只是想让你的答案是一般问题的答案。我知道了。也许下次您可以将其包含在您的问题中。那我就可以在上面浪费零时间了。 (2认同)

pro*_*365 6

您可以使用 powershell 批量睡眠:

毫秒

powershell -nop -c "& {sleep -m Milliseconds}"
Run Code Online (Sandbox Code Playgroud)

powershell -nop -c "& {sleep seconds}"
Run Code Online (Sandbox Code Playgroud)

  • 奇迹般有效。 (2认同)
  • 是的,这比“超时”要好得多 示例:powershell -nop -c "& {sleep 10}" (2认同)