批处理文件中的Sleep命令是什么?

6
当我编写一个批处理文件以自动运行时,该如何编写它,以便在批处理文件运行时,可以在命令之间暂停几秒钟?
上下文:
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比远程快得多,时间非常重要。
当我手动执行时,这显然很容易,我只需等待即可。但运行批处理文件会使它们以接近瞬间的速度相继运行所有命令,而不考虑上一个命令的完成状态。如何加入暂停?

可能是批处理中的睡眠的重复问题。 - Peter Mortensen
1
https://dev59.com/N1zUa4cB1Zd3GeqP6cML#7958678更有用,可以标记为答案。 - Kiquenet
4个回答

26

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

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

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

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,因为它将可用。

1
我认为大多数从谷歌来到这里的人会发现这个答案(不是被采纳的那个)最有用。 - SSH This
1
由于TCP/IP现在已经无处不在,使用ping通常会起作用,但前提是必须使用TCP/IP(客户端Windows机器可以使用NetBEUI或IPX/SPX)。参考:http://www.techrepublic.com/article/get-it-done-the-complete-windows-2000-client-tcp-ip-configuration-guide/ - Peter Mortensen
确认在Windows 10企业版中,上述提到的睡眠命令是可用的。 - Dale Moore

8
在最新版本的Windows中有一个timeout命令:
timeout /T 10

数字后面跟着T表示秒数。上述命令将等待10秒钟。


3

2

我认为这里的信息: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打开管道时才会运行,一旦完成,它就会静默关闭。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接