批处理文件中是否可能发出等待命令?

3

我有一个批处理文件,它运行多个 .cmd 文件。 我想知道是否可以在运行最后一个文件之前等待60秒左右。

谢谢


可能是某个有太多空闲时间的人的重复问题。 - Will I Yam
8个回答

4
您可以使用timeout [秒数],例如timeout 60。该命令用于设置超时时间。

1
它一直显示超时未识别超时/t 40。 - Will I Yam
你使用的是哪个操作系统?这在Win 7上开箱即用 - 对于旧操作系统,您可能需要像其他帖子中建议的那样下载资源工具包。 - BrokenGlass
是的,您需要下载资源工具包才能使其正常工作,然后您可以使用Sleep或Timeout。 - BrokenGlass

4
另一个“解决方法”是使用choice命令,该命令在各种Windows/Dos操作系统上得到更好的支持。
choice /c a /t 10 /d a > nul

将导致暂停10秒钟,屏幕上将不会显示任何内容。


2

1

你可以使用超时

Syntax
  TIMEOUT [seconds]

或者从Windows Server 2003资源工具包中Sleep 链接
Syntax
  SLEEP [seconds]

1

PING 127.0.0.1 -n 61

这个命令是ping本机,它会立即回复,每次ping的时间间隔为1秒,第一次ping会立即发送,所以只需将想要等待的秒数加上1作为要发送的ping次数即可。在这种情况下,它将等待60秒。


这将适用于所有版本的Windows,一些较旧的版本(例如XP)没有某些超时/休眠程序。 - Trent

1
如果您喜欢纯 cmd 脚本,请使用以下代码片段。
首先,此代码片段以百分之一秒为单位返回当前时间。
:gettime
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

然后,您可以使用它来构建如下的等待循环。

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

最后,将所有部分组合在一起,您就可以得到这个使用示例。
@echo off
setlocal enableextensions enabledelayedexpansion

call :gettime t1
echo %t1%
call :wait %1
call :gettime t2
echo %t2%
set /A tt = (t2-t1)/100
echo %tt%
goto :eof

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

:gettime 
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

关于这里使用的命令的更详细描述,请查看HELP SETHELP CALL信息。


0
一个快速的谷歌搜索给出了这个答案...
PING 1.1.1.1 -n 1 -w 30000 >NUL
它会尝试进行ping直到超时(30000毫秒)。

1
那是最迂回的方式来引发超时。 - user195488
阅读其他回答后,似乎它们需要下载,如果这是一个托管服务器,则可能无法获得该下载。您能否请取消对我的答案的投票?它可以实现结果,而不管您是否认为它是您最喜欢的方法。 - BenCr
1
我个人认为这是一个很好的答案,它解决了我在使用的操作系统中的问题,而无需下载任何资源工具包。 - Will I Yam
不知道,拿出你的卡尝试一下吧。 - BenCr
如果原帖作者对这个答案比其他所有答案都满意,那么我不明白为什么它会被评为-1。 - Town
显示剩余3条评论

0
太好了!这个是正确的解决方案,终于找到了。 只有一个细节,如果您在本地化的操作系统上使用它,请确保您的“DELIMS”设置适合。 例如,对于捷克本地化,请使用“DELIMS =:,”而不是“DELIMS =:。”。

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