Запустите программу, если и только если начался другой - PullRequest
0 голосов
/ 12 февраля 2012

Как мне сделать следующее:

start a.exe
wait 5000

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

Другими словами, a.exe запущен. Если по какой-то причине он не запускается (файл не найден), b.exe не выполняется. В противном случае b.exe запускается через пять секунд.

1 Ответ

1 голос
/ 12 февраля 2012

ОК, теперь вопрос имеет смысл.

Я провел несколько тестов, и, если a.exe не существует, всплывает неприятное интерактивное окно с ошибкой Windows, и ваш пакет не будет продолжаться, пока вы не вручнуюзакрыть окно ошибки.(По крайней мере, это то, что происходит на моей машине с Vista). Поэтому, возможно, вы захотите проверить, что a.exe существует, прежде чем пытаться его запустить.

Если вы знаете полный путь заранее, тогда тест простЕСЛИ СУЩЕСТВУЕТ.Но если вы этого не сделаете, то вы можете найти путь с модификатором ~ $: 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
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...