检查命令是否在批处理文件中可用

时间:2012-05-21 14:02:20

标签: windows batch-file command

我正在为Windows编写批处理文件,并使用命令7z(7-Zip)。我把它的位置放在PATH中。是否有一种相对简单的方法来检查命令是否可用?

4 个答案:

答案 0 :(得分:22)

执行命令以检查其可用性(即,在PATH环境变量中找到)。请改用where

where 7z.exe >nul 2>nul
IF NOT ERRORLEVEL 0 (
    @echo 7z.exe not found in path.
    [do something about it]
)

>nul2>nul会阻止向用户显示where命令的结果。直接执行程序有以下问题:

  • 程序没有立即明白
  • 非预期的副作用(更改文件系统,发送电子邮件等)
  • 资源密集,启动缓慢,阻止I / O,......

您还可以定义一个例程,它可以帮助用户确保他们的系统满足要求:

rem Ensures that the system has a specific program installed on the PATH.
:check_requirement
set "MISSING_REQUIREMENT=true"
where %1 > NUL 2>&1 && set "MISSING_REQUIREMENT=false"

IF "%MISSING_REQUIREMENT%"=="true" (
  echo Download and install %2 from %3
  set "MISSING_REQUIREMENTS=true"
)

exit /b

然后使用它,如:

set "MISSING_REQUIREMENTS=false"

CALL :check_requirement curl cURL https://curl.haxx.se/download.html
CALL :check_requirement svn SlikSVN https://sliksvn.com/download/
CALL :check_requirement jq-win64 jq https://stedolan.github.io/jq/download/

IF "%MISSING_REQUIREMENTS%"=="true" (
  exit /b
)

答案 1 :(得分:1)

是的,

@echo off
set found=
set program=7z.exe
for %%i in (%path%) do if exist %%i\%program% set found=%%i
echo "%found%"

答案 2 :(得分:-1)

是的,打开命令窗口并输入“7z”(我假设这是可执行文件的名称)。如果您收到错误消息,指出命令或操作未被识别,那么您知道路径语句在某处有问题,否则它不会。

答案 3 :(得分:-1)

如果找不到命令,尝试执行7z.exe将返回%errorlevel% 9009。你可以检查一下。

7z.exe
if %errorlevel%==9009 echo Command Not Found

注意 :此解决方案适用于此特定7zip用例,并且可能适用于其他许多用例。但作为一般规则,执行命令以确定它是否存在可能是有害的。因此,请确保您了解执行您正在检查的命令的效果,并使用此方法自行决定。