Определите, распознана ли команда в пакетном файле

Я пишу 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?

43
задан 14.08.2010, 16:08

4 ответа

Самый легкий путь состоит в том, чтобы просто выполнить команду, но это имеет другие проблемы, конечно, так как, возможно, Вы не хотите запускать вероятностный процесс.

for %%x in (my_command.exe) do if not [%%~$PATH:x]==[] set MyCommandFound=1

альтернатива который searchs для программы в путях, перечисленных %PATH% переменная среды. Это - по существу чистая пакетная версия which(1). Это может быть сделано лучше, но по существу это - это.

7
ответ дан 07.12.2019, 08:40

Для моей ситуации. Абсолютный самый простой путь использует || или && оператор.

my_command.exe -version 2>NUL && echo "my_command exists"

или

my_command.exe -version 2>NUL || echo "my_command doesn't exist"
3
ответ дан 07.12.2019, 08:40

Если требование установки дополнительных инструментов в порядке, существует a where команда в наборах ресурса; видеть Windows, эквивалентный из whereis?.

Иначе, для версий Windows, которые не являются слишком древними, это выполнимо в чистом cmd, как упомянуто в исполнимом поиске DOS кроме ПУТИ.

1
ответ дан 07.12.2019, 08:40

Я знаю это не совсем, что Вы ищете, но с небольшим изменением в логике это должно выполнить то, в чем Вы нуждаетесь.

Каждая команда, которая выполняется, имеет код возврата (иначе 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
)
1
ответ дан 07.12.2019, 08:40

Хотя все это может сработать, почему бы не запустить "if /?" в командной строке для получения подробностей

.
0
ответ дан 07.12.2019, 08:40

Теги

Похожие вопросы