批处理文件超时以终止当前命令并执行下一个命令

时间:2016-05-20 08:54:20

标签: windows batch-file timeout

我目前正在使用批处理文件在我的计算机上运行模拟,以使事情更加自动,而不是必须在前一个模拟完成后自己启动每个模拟。

但是我注意到,当我运行我的批处理文件时,如果其中一个模拟器无法完成并且只运行了几个小时,我就无法跳过终止它并跳到下一个。这意味着,如果它在我的200 ...第二次模拟中跳出来......那么我就失去了一个周末的模拟时间。

我想知道你们其中一个人是否可以告诉我如何加入"计时器"执行条件,以便在运行5小时后终止并继续执行下一个命令。

有关信息,我的文件看起来像这样(ogs是我的可执行文件,路径是可执行文件查找输入的位置,然后它将consol打印到名为Screen_out.txt的文件中):

ogs Depth_200_Poro_15_Thick_40_Perm_100\ax    >    Depth_200_Poro_15_Thick_40_Perm_100\Screen_out.txt
ogs Depth_200_Poro_15_Thick_174_Perm_100\ax    >    Depth_200_Poro_15_Thick_174_Perm_100\Screen_out.txt
ogs Depth_200_Poro_15_Thick_350_Perm_100\ax    >    Depth_200_Poro_15_Thick_350_Perm_100\Screen_out.txt

我有200条左右的行,但是我使用Python脚本自动生成它们,所以我不介意重复的解决方案看起来像这样,因为它只是添加它的问题到我用来创建批处理文件的字符串:

set timer to 5hrs, if timer is reached terminate and move on
ogs Depth_200_Poro_15_Thick_40_Perm_100\ax    >    Depth_200_Poro_15_Thick_40_Perm_100\Screen_out.txt
set timer to 5hrs, if timer is reached terminate and move on
ogs Depth_200_Poro_15_Thick_174_Perm_100\ax    >    Depth_200_Poro_15_Thick_174_Perm_100\Screen_out.txt
set timer to 5hrs, if timer is reached terminate and move on
ogs Depth_200_Poro_15_Thick_350_Perm_100\ax    >    Depth_200_Poro_15_Thick_350_Perm_100\Screen_out.txt

我环顾四周,但似乎在Windows下,timeout命令只会暂停执行而不是终止它。

我尝试了以下使用How to set a timeout for a process under Windows 7?

start   "ogs    Depth_4000_Poro_23_Thick_350_Perm_650\ax    >    Depth_4000_Poro_23_Thick_350_Perm_650\Screen_out.txt"
timeout /t 10
taskkill /im ogs.exe /f 
timeout /t 7

以上似乎有效,程序执行并在10秒后关闭但是命令窗口打开了

start   "ogs    Depth_4000_Poro_23_Thick_350_Perm_650\ax    >    Depth_4000_Poro_23_Thick_350_Perm_650\Screen_out.txt"
<\ n>当ogs.exe被杀死时,它不会关闭。

---- 29/07/2016更新-----

所以目前我正在使用以下内容:

start cmd /c    "ogs    Depth_4000_Poro_23_Thick_350_Perm_650\ax    >    Depth_4000_Poro_23_Thick_350_Perm_650\Screen_out.txt" //executes the command as before
timeout /t 34000// waits for 34000 seconds
taskkill /im ogs.exe /f // terminates the program after the 10 seconds
timeout /t 7 // waits 10 seconds to insure the program has terminated correctly

我的问题是,当我的程序ogs.exe在34000秒之前完成时,计算机将在启动下一个ogs.exe运行之前等待超时。如果程序在34000秒超时之前完成,我希望它等待最多34000秒但是继续下一次运行

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

感谢@CherryDT设法让它使用:

start cmd /c    "ogs    Depth_4000_Poro_23_Thick_350_Perm_650\ax    >    Depth_4000_Poro_23_Thick_350_Perm_650\Screen_out.txt" //executes the command as before
timeout /t 10 // waits for 10 seconds
taskkill /im ogs.exe /f // terminates the program after the 10 seconds
timeout /t 7 // waits 10 seconds to insure the program has terminated correctly

其他有用的帖子:Batch file - restart program after every 20 minutes

How to set a timeout for a process under Windows 7?