Чтобы очень похоже на псевдокод, опубликованный в оригинальном вопросе:
set FILE1=c:\path\tool.exe
set FILE2=c:\path\to\other\tool.exe
if exist "%FILE1%" (
%FILE1%
) else (
%FILE2%
)
Как указал Джои, на самом деле это открытая форма:
%FILE1% || %FILE2%
но я не согласен. Первый работает FILE2
- когда FILE1 не существует или
- существует, но не удалось.
Также печатается дополнительное сообщение об ошибке, когда файл не может быть выполнен (в основном из-за того, что он не найден или доступ запрещен). Для подавления этого сообщения используйте:
(%FILE1% || %FILE2%) 2>nul
Например
> (echo a || echo b)
a
> (echoa || echo b) 2>nul
b
Чтобы подавить все выходные данные и просто организовать, чтобы любой из обоих файлов был запущен:
(%FILE1% || %FILE2%) 1>&2 2>nul
или
((%FILE1% || %FILE2%) 1>&2 2>nul) || echo both have failed
как в:
> ((echo a || echo b) 2>nul) || echo both have failed
a
> ((echoa || echo b) 2>nul) || echo both have failed
b
> ((echoa || echob) 2>nul) || echo both have failed
both have failed