当我编写批处理文件以自动运行时,如何编写它以便在运行批处理文件时,它可以在命令之间暂停几秒钟?
上下文:
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比远程运行dir要快得多,而且时间非常重要。
当我手动做这件事时,显然很容易,我只是等待。但是,运行批处理文件使其以接近彼此的即时速度运行所有命令,而不管最后一个命令的完成状态如何。我如何暂停?
答案 0 :(得分: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]
注意:Windows Resource kit for 2003包含 sleep.exe 命令。
如果您不了解Windows版本,只需使用ping hack,因为它可用。
答案 1 :(得分:7)
在更新版本的Windows中有timeout
命令:
timeout /T 10
答案 2 :(得分:3)
2003年的Windows资源工具包将安装在Windows XP上。它包含SLEEP.EXE,可以从命令批处理文件中使用它。
下载在这里http://www.microsoft.com/download/en/details.aspx?id=17657
答案 3 :(得分:2)
我认为这里的信息:http://malektips.com/xp_dos_0002.html会比我更好地解释它。
但是仍然存在错误处理的情况(如果远程计算机没有启动怎么办?)。 cmd.exe对于大多数远程活动来说都是无用的,使用powershell可以实现更多功能。
EDIT ::
事实上,您可以使用psexec执行本地存储的程序(它被复制并在服务器端本地执行) - 使用它是一种更可行的替代方案吗?
如果不知道你打算运行哪些命令,就很难进一步了解它。
EDIT(2):
如果它只是您正在运行的一个命令,只需将其存储在专用文件中,例如'remote_dir_listing.cmd',然后使用psexec:
psexec \\server -u <user> -p <pass> -c -f remote_dir_listing.cmd
每次执行时,都会强制将本地文件的副本发送到远程端(如果要扩展它)。通过这种方式,您可以完全不需要暂停 - 只有当psexec打开管道时它才会运行,一旦完成,它就会自动关闭。