当且仅当另一个已启动时启动程序

时间:2012-02-11 22:27:39

标签: windows batch-file

如何执行以下操作:

start a.exe
wait 5000

if(a.exe has started)
{
    start b.exe
}

换句话说,a.exe已启动。如果由于某种原因(未找到文件)无法运行,则不会执行b.exe。否则,b.exe将在五秒钟后启动。

1 个答案:

答案 0 :(得分:1)

好的,这个问题现在有意义了。

我做了一些测试,如果a.exe不存在,则弹出一个令人讨厌的Windows交互式错误窗口,并且在您手动关闭错误窗口之前,您的批处理将不会继续。 (至少这是我的Vista机器上发生的事情)所以你可能想在尝试启动它之前验证它是否存在。

如果您提前了解完整路径,那么IF EXIST的测试很简单。但是如果你不这样做,那么你可以使用〜$:PATH修饰符搜索路径到FOR变量或参数扩展。

我不知道如果存在a.exe但由于其他原因而无法启动会发生什么。也许它仍会弹出错误窗口 - 这将是不幸的。

我原本以为你需要使用像TASKLIST这样的东西来验证a.exe是否正在运行,但是现在我认为你可以在START命令之后检查错误级别。

WAIT不是标准的Windows命令,但TIMEOUT(至少从Vista开始)。

for %%A in ("a.exe") if "%%~$:pathA" neq "" (
  start a.exe && (
    >nul timeout /t 5
    start b.exe
  )
)