在bat文件中的给定时间后结束命令

时间:2016-12-08 12:17:03

标签: batch-file timeout

我有一个bat文件来执行多个程序,并且有一个程序可能会保持循环。我想在1分钟后杀死该程序的执行并执行下一个程序。

我想执行的程序gif_0.exegif_1.exe,...从txt接收输入并将输出写入另一个txt。

gif_0.exe input1.txt output1_0.txt
timeout /t 20
gif_0.exe input2.txt output2_0.txt
timeout /t 20
gif_1.exe input3.txt output3_0.txt
timeout /t 20
gif_2.exe input4.txt output4_0.txt
timeout /t 20
gif_3.exe input5.txt output5_0.txt

2 个答案:

答案 0 :(得分:3)

start "Title goes here" gif_0.exe input1.txt output1_0.txt
timeout /t 60 /nobreak>nul
taskkill /F /IM gif_0.exe

应该做的伎俩。在你需要之后重复。

说明:

start使用给定参数的应用程序
等倒60秒,没有选择在倒计时之前停止计时器而没有任何输出 使用应用程序的imagename终止任务。如果你可能有几个这种并行运行的例子,这会杀死所有人! 您可以使用过滤器来缩小范围;看看taskkill /?

我不确定您的问题中是否存在拼写错误,但假设您的申请gif_n.exe且参数为inputn+1.exe outputn+1.exe 您可以执行以下操作:

@echo off
setlocal EnableDelayedExpansion
for /l %%n in (0, 1, n) do (
    set /a foo=%%n+1
    start gif_%%n.exe input!foo!.txt output!foo!_0.txt
    timeout /t 60 /nobreak>nul
    taskkill /F /IM gif_%%n.exe
)

这将在一个步骤中从0到n,并在循环中执行与上面相同的操作。

这里有2个补充:

需要行setlocal EnableDelayedExpansion来激活在一个封闭的括号内变换(如for循环或if条件)后使用变量值的可能性。

set /a foo=%%n+1会将变量foo的值设置为%%n+1的值。需要使用开关/a来执行实际计算,而不是附加字符串。

要在for-loop中使用变量,我们必须使用DelayedExpasion(见上文):

只需将您通常使用的%更改为!,即可完成。

为确保一切正常,您可能需要在三条主线前放置一个回音。

如果不清楚,请随意提问:)

答案 1 :(得分:3)

我的想法与Geisterfurz007类似。 但是我的批处理并行启动了exe,并且批处理的另一个实例以启动的exe的名称作为arg。新实例检查arg并跳转到等待超时的sub,并尝试终止exe。

@echo off
setlocal EnableDelayedExpansion
Set Wait=60
If "%1" Neq "" Goto :KillTask
for /l %%n in (0, 1, n) do (
    set /a foo=%%n+1
    start gif_%%n.exe input!foo!.txt output!foo!_0.txt
    Start %~f0 gif_%%n.exe
)
Goto :Eof
:KillTask %1
timeout /t %Wait% /nobreak>nul
taskkill /F /IM %1