Я пишу bat сценарий, в котором я вызываю программу (такую как javac). Для простоты я хочу проверить, существует ли команда, прежде чем я выполню ее. т.е. Если команда существует в ПУТИ.
Например,
if (my_command.exe is a recognized command) then (
my_command.exe my_args
) else (
REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file."
REM Do not run my_command.exe
)
Что лучший способ состоит в том, чтобы сделать это в Windows?
Самый легкий путь состоит в том, чтобы просто выполнить команду, но это имеет другие проблемы, конечно, так как, возможно, Вы не хотите запускать вероятностный процесс.
for %%x in (my_command.exe) do if not [%%~$PATH:x]==[] set MyCommandFound=1
альтернатива который searchs для программы в путях, перечисленных %PATH%
переменная среды. Это - по существу чистая пакетная версия which(1)
. Это может быть сделано лучше, но по существу это - это.
Если требование установки дополнительных инструментов в порядке, существует a where
команда в наборах ресурса; видеть Windows, эквивалентный из whereis?.
Иначе, для версий Windows, которые не являются слишком древними, это выполнимо в чистом cmd
, как упомянуто в исполнимом поиске DOS кроме ПУТИ.
Я знаю это не совсем, что Вы ищете, но с небольшим изменением в логике это должно выполнить то, в чем Вы нуждаетесь.
Каждая команда, которая выполняется, имеет код возврата (иначе errorlevel), если код возврата 0 (нуль), команда работала успешно, если код возврата больше, чем 0, что-то пошло не так, как надо.
Посмотрите здесь для получения дополнительной информации.
Что-то как -
my_command
if (%ERRORLEVEL% > 0) then (
REM Output was probably "'my_command.exe' is not recognized as an internal or external command, operable program or batch file. OR SOMETHING WENT WRONG WITH IT."
REM Do not run my_command.exe
)
Хотя все это может сработать, почему бы не запустить "if /?" в командной строке для получения подробностей
.