有没有办法检查某些东西是否不在 PATH 中,然后有条件地在 CMD 中执行某些操作?

有没有办法检查某些东西是否不在 PATH 中,然后有条件地在 CMD 中执行某些操作?

如果工作目录中没有 7z.exe,则这非常适合下载 7zr 并在批处理脚本中执行解压缩任务。

if not exist "7z.exe" curl -L "https://www.7-zip.org/a/7zr.exe" -o 7z.exe

但是,如果我安装了 7-zip,并且 7z.exe 在 PATH 中,该怎么办?在这种情况下,我宁愿跳过下载 7zr,然后继续解压任务。

编辑:此用例仅作为示例。我的目的是分发下载所需内容的批处理脚本如果必要的。

答案1

您可以检查注册表项并检查此查询返回的错误级别:

Reg Query "HKEY_CURRENT_USER\SOFTWARE\7-Zip" /v "Path"

这是一个检查路径的完整示例7-zip在注册表中,如果不存在,他就会下载它。

@echo off
Title check the path of 7-Zip 
Call :Check_7Zip
echo "%EXE_7Z_PATH%"
if not exist "%EXE_7Z_PATH%" Call :Download7Zip
pause & exit /b
::-----------------------------------------------------------------------------------------------------------------------------
:Check_7Zip
Reg Query "HKEY_CURRENT_USER\SOFTWARE\7-Zip" /v "Path">nul 2>&1
If [%errorlevel%] EQU [1] (Call :Download7Zip
    ) else (
    @FOR /f "tokens=2*" %%i in ('Reg Query "HKEY_CURRENT_USER\SOFTWARE\7-Zip" /v "Path" 2^>nul') do (Set "EXE_7Z_PATH=%%j7z.exe")
)
Exit /B
::-----------------------------------------------------------------------------------------------------------------------------
:Download7Zip
curl -L "https://www.7-zip.org/a/7zr.exe" -o 7z.exe
Exit /B
::------------------------------------------------------------------------------------------------------------------------------

答案2

如果 PATH 中不存在 7z.exe,请尝试以下操作:

where /q 7z.exe || curl -L "https://www.7-zip.org/a/7zr.exe" -o 7z.exe

如果 7z.exe 已经存在,则仅输出 7z.exe 路径,如果不存在,它将运行curl -L "https://www.7-zip.org/a/7zr.exe" -o 7z.exe

where 7z.exe 2>nul || curl -L "https://www.7-zip.org/a/7zr.exe" -o 7z.exe

例子

C:> where /q 7z.exe || curl -L "https://www.7-zip.org/a/7zr.exe" -o 7z.exe
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  564k  100  564k    0     0   240k      0  0:00:02  0:00:02 --:--:--  240k

C:\>set "path=%cd%;%path%"
C:\>where 7z.exe
C:\7z.exe

相关内容