Я пишу сценарий bat, в котором я вызываю программу (например, javac). Для простоты я хочу проверить, существует ли команда, прежде чем ее запустить. т.е. если команда существует в PATH.
Например,
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?
windows
command-line
batch
script
user46097
источник
источник
Ответы:
источник
>nul 2>nul
заmycommand
.Приведенный ниже код всегда должен выполняться чисто, без вывода мусора.
Выход:
Тот же код, что и в одной строке:
Выход:
Обратите внимание, что порядок
&&
и,||
кажется, имеет значение. Кроме того, команда, существование которой вы проверяете, должна возвращаться с уровнем ошибки <= 0, чтобы это работало. Надеюсь, команда имеет /? или аргументы --help, или, как и в случае с Java, команду информации о версии.источник
Самый простой способ - просто запустить команду, но у нее, конечно, есть другие проблемы, поскольку, возможно, вы не хотите запускать случайный процесс.
альтернатива, которая ищет программу по путям, указанным в
%PATH%
переменной среды. Это по сути чистая пакетная версияwhich(1)
. Это можно сделать лучше, но по сути это так.источник
Некоторые уточнения к версии ниже. Проверьте, существует ли эта команда, и отключите ненужные выходные данные.
источник
WHERE \Windows\System32\cmd.exe
=>INFO: Could not find files for the given pattern(s).
Для моей ситуации. Абсолютно простым способом является использование || или && оператор.
или же
источник
Если требуется установка дополнительных инструментов, в наборе
where
ресурсов есть команда; увидеть Windows эквивалент где? ,В противном случае для версий Windows, которые не являются слишком древними, это можно сделать в чистом виде
cmd
, как упоминалось в поиске исполняемых файлов Dos, за исключением PATH .источник
Я знаю, что это не совсем то, что вы ищете, но с небольшим изменением в логике это должно выполнить то, что вам нужно.
Каждая выполняемая команда имеет код возврата (он же уровень ошибки), если код возврата равен 0 (ноль), команда успешно выполнена, если код возврата больше 0, что-то пошло не так.
Смотрите здесь для более подробной информации.
Что-то вроде -
источник
Хотя все эти пути могут работать, почему не встроенный способ?
Запустите "если /?" в командной строке для деталей
источник
PATH
.