如果批处理命令在给定时间内没有终止,请停止

时间:2019-02-05 21:25:05

标签: batch-file

我有一个简单的批处理文件,该文件运行一堆PHP文件,一个接一个。有时,其中一些php文件会挂起,并且当这种情况发生时,整个批处理文件将停止执行此后要发送的文件。

是否有一种方法可以停止运行该命令,并在给定的时间段后继续执行批处理脚本中的下一个命令?

到目前为止,我的批处理文件仅包含大约800行,其命令与以下命令类似:

php72 ../simulation.php --version 0.9.0.4 --hashsimmilar false --thinkahead 0 --detailed 0 --outfile catacombs.outfile.csv --workingdir "C:/xampp/htdocs/rpg_prog/" --customfight 1,2,,,,1,,,1,,0,0,0,Catacombs1
php72 ../simulation.php --version 0.9.0.4 --hashsimmilar false --thinkahead 1 --detailed 0 --outfile catacombs.outfile.csv --workingdir "C:/xampp/htdocs/rpg_prog/" --customfight 1,2,,,,1,,,1,,0,0,0,Catacombs1
php72 ../simulation.php --version 0.9.0.4 --hashsimmilar false --thinkahead 2 --detailed 0 --outfile catacombs.outfile.csv --workingdir "C:/xampp/htdocs/rpg_prog/" --customfight 1,2,,,,1,,,1,,0,0,0,Catacombs1

例如,如果以上列表中的第二行挂起,则整个批处理文件将挂起,而第三行将永远不会执行。

1 个答案:

答案 0 :(得分:1)

鉴于没有其他php72.exe进程,您可以在每个php72调用之前加start "" /B前缀,并在每个php72调用之后加上以下几行(删除{{ 1}}选项(如果您不想强行终止任务):

/F

后缀timeout /T 10 /NOBREAK > nul taskkill /IM "php72.exe" /F > nul 2>&1 只是避免抛出任何(错误)消息。


不必多次复制上述行,也可以将以下代码放在批处理文件的顶部:

>

当然,您可以在单独的文件中包含@echo off rem // Read all lines from this batch file that begin with `php72 ` and iterate over them: for /F "delims=" %%C in (' findstr /BIC:"php72 " "%~f0" ') do ( rem // Execute the currently iterated `php72` command line: start "" /B %%C rem // Wait for some time: timeout /T 10 /NOBREAK > nul rem // Kill the `php72` process (or actually all of them) if still running: taskkill /IM "php72.exe" /F > nul 2>&1 ) rem // Avoid to fall into the `php72` command lines another time: exit /B rem // These are your lines: php72 ../simulation.php --version 0.9.0.4 --hashsimmilar false --thinkahead 0 --detailed 0 --outfile catacombs.outfile.csv --workingdir "C:/xampp/htdocs/rpg_prog/" --customfight 1,2,,,,1,,,1,,0,0,0,Catacombs1 php72 ../simulation.php --version 0.9.0.4 --hashsimmilar false --thinkahead 1 --detailed 0 --outfile catacombs.outfile.csv --workingdir "C:/xampp/htdocs/rpg_prog/" --customfight 1,2,,,,1,,,1,,0,0,0,Catacombs1 php72 ../simulation.php --version 0.9.0.4 --hashsimmilar false --thinkahead 2 --detailed 0 --outfile catacombs.outfile.csv --workingdir "C:/xampp/htdocs/rpg_prog/" --customfight 1,2,,,,1,,,1,,0,0,0,Catacombs1 命令行,然后需要相应地调整php72循环:

for /F