如果命令提前完成,如何自动停止计数超时?

时间:2015-11-02 12:25:50

标签: command-line timeout

在我的脚本中,我使用超时来设置执行命令的最大时间限制。

start 7z.exe t %%f
if errorlevel 2 (DEL %%f & echo File broken. Reload File!)
timeout /t 3600

如果执行持续时间超过一小时,则超时应该会中断执行。这没有任何问题。

但是,如果命令在时间戳之前完成,我怎么能忽略超时计数并自动继续我的脚本

1 个答案:

答案 0 :(得分:0)

正如当前所写,start command没有/W切换不会影响/更改errorlevel!的证明

==> hfhgf
'hfhgf' is not recognized as an internal or external command,
operable program or batch file.

==> echo %errorlevel%
9009

==> start "" ping.exe localhost

==> echo %errorlevel%
9009

==> start "" /W ping.exe localhost

==> echo %errorlevel%
0

使用/W/WAIT切换(启动应用程序并等待它终止)并删除所有timeout行,如下所示。我想您的代码段可能是do循环的for部分:

for %%f in (*.zip) do (
  (call )
  start "" /W 7z.exe t "%%f"
  if errorlevel 2 (
     echo File broken. Reload File %%f
     DEL "%%f"
  )
)

关于(call )解释,请参阅Dave Benham对setting ERRORLEVEL to 0 question的回复:

  

如果要强制将errorlevel强制为0,则可以使用此方法   完全不直观但非常有效的语法:(call )。空间   在调用之后是至关重要的。如果要将errorlevel设置为1,则为   可以使用(call)。至关重要的是,之后没有任何空间   呼叫