我正在为Windows编写批处理文件,并使用命令7z
(7-Zip)。我把它的位置放在PATH中。是否有一种相对简单的方法来检查命令是否可用?
答案 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]
)
>nul
和2>nul
会阻止向用户显示where
命令的结果。直接执行程序有以下问题:
您还可以定义一个例程,它可以帮助用户确保他们的系统满足要求:
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
用例,并且可能适用于其他许多用例。但作为一般规则,执行命令以确定它是否存在可能是有害的。因此,请确保您了解执行您正在检查的命令的效果,并使用此方法自行决定。