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 比远程运行要快得多,而且时间至关重要。

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

4

4 回答 4

26

在 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]

注意:2003 的 Windows 资源工具包包含sleep.exe命令。

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

于 2011-10-31T19:29:14.587 回答
7

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

timeout /T 10
于 2011-10-31T19:26:52.873 回答
3

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

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

于 2011-10-31T19:10:26.903 回答
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 打开管道时它才会运行,并且一旦完成,它就会默默地关闭自己。

于 2011-10-31T18:58:57.910 回答