【问题标题】:Sleep command in batch file?批处理文件中的睡眠命令?
【发布时间】:2011-12-18 23:39:19
【问题描述】:

当我正在编写一个自动运行的批处理文件时,我如何编写它以便在批处理文件运行时,它可以在命令之间暂停几秒钟?

上下文:

psexec \\server -u user -p pass cmd
[there needs to be a pause here for psexec to establish a connection]
dir /s >output.txt \\server\shared

*注意:我使用 psexec 而不是在本地运行 dir 命令服务器端的原因是因为在本地计算机上运行 dir 比远程运行要快得多,而且时间至关重要。

当我手动执行此操作时,这显然很容易,我只是等待。但是运行批处理文件会使其以接近即时的速度运行所有命令,而不管最后一个命令的完成状态如何。如何暂停?

【问题讨论】:

标签: command-line batch-file psexec


【解决方案1】:

在 Windows Vista / Windows 7 上,您可以使用 timeout 命令:

timeout /T [delay in seconds] /NOBREAK > NUL

在以前版本的 Windows 上,您可以使用 ping 命令(ping 命令在每次迭代之间有 1000 毫秒的延迟):

ping -n [delay in seconds + 1] 127.0.0.1 > NUL

某些版本的 Windows(如 Windows Server 2003)具有 sleep.exe 可执行文件:

sleep [delay in seconds]

注意:Windows Resource kit for 2003 包含 sleep.exe 命令。

如果您不知道 Windows 版本,只需使用 ping hack,因为它会可用。

【讨论】:

  • 我想说大多数从谷歌来到这里的人会发现这个答案(不是公认的)最有用。
  • 由于 TCP/IP 现在无处不在,使用 ping 通常可以工作,但前提是使用 TCP/IP(客户端 Windows 机器可以使用 NetBEUI 或 IPX/SPX )。参考:techrepublic.com/article/…
  • 确认在 Windows 10 企业版中上述 sleep 命令可用。
【解决方案2】:

在较新版本的 Windows 中有timeout 命令:

timeout /T 10

【讨论】:

    【解决方案3】:

    适用于 2003 的 Windows 资源工具包将安装在 Windows XP 上。它包含可以从命令批处理文件中使用的 SLEEP.EXE。

    下载地址在这里http://www.microsoft.com/download/en/details.aspx?id=17657

    【讨论】:

      【解决方案4】:

      我认为这里的信息:http://malektips.com/xp_dos_0002.html 会比我解释得更好。

      但仍然存在错误处理的情况(如果远程机器没有启动怎么办?)。 cmd.exe 在大多数情况下对于执行任何远程活动都是毫无用处的,使用 powershell 可以实现更多。

      编辑::

      事实上,您可以使用 psexec 执行本地存储的程序(它被复制并在本地服务器端执行)- 使用它会是更可行的选择吗?

      在不知道您打算运行什么命令的情况下,很难更进一步。

      编辑(2)::

      如果它只是您正在运行的一个命令,只需将其存储在专用文件中,例如“remote_dir_listing.cmd”,然后使用 psexec 与:

      psexec \\server -u <user> -p <pass> -c -f remote_dir_listing.cmd
      

      这将在您每次执行时强制将本地文件的副本复制到远程端(以防您想扩展它)。通过这种方式,您完全无需暂停 - 只有当 psexec 打开管道时它才会运行,并且一旦完成,它就会默默地自行关闭。

      【讨论】: