如果process1没有运行,请启动process2

时间:2019-06-29 14:43:17

标签: batch-file

我需要创建一个启动process1的脚本,该脚本会生成process2,然后等待process2退出并启动process3。

听起来对我来说很简单,但我根本无法正常工作。

我尝试寻找类似的解决方案,发现了类似的东西

tasklist /FI "IMAGENAME eq process1"
if errorlevel 0 (
        echo "1"
    exit 0
) else (
    echo "2"
    exit 0

)

但即使是这种简单的东西,也会在1000个炮弹周围产生并崩溃

我很确定自己在这里做错了,但我找不到答案。

3 个答案:

答案 0 :(得分:1)

您的问题似乎是您对if errorlevel 0的解释与cmd的解释不同。

if errorlevel ncmd解释为“如果错误级别为n 或大于n

因此,if errorlevel 0本质上总是正确(在某些深奥的情况下,errorlevel变为负数)。

解决方案:最简单的方法可能是if %errorlevel%==0 另一种选择:if errorlevel 1 (the "else" part from your code) else (the TRUE part of your code)

答案 1 :(得分:0)

start有一个/wait开关,它告诉批处理启动程序,直到脚本完成才继续执行脚本。

start "" /wait process1
start "" /wait process2
start "" /wait process3

答案 2 :(得分:0)

已解决:

所以,@ elzooilogico指出我做错了-由于某种原因,我将其命名为tasklist.bat并对其进行了自我命名。

我的脚本看起来像这样,就像一个符咒一样

start process1.lnk
timeout /t 50
:loop
tasklist /FI "IMAGENAME eq process2.exe" 2>NUL | find /I /N "process2.exe">NUL
if errorlevel 1 (
    start process3
) else (
    timeout /t 5
    goto loop
)

它将启动process1,等待50秒,然后在不再存在process2时退出,或者以5秒的间隔循环直到process2退出。最终,它会启动process3。