0

我正在尝试修改我的批处理脚本以获取某个软件的安装路径,但是它需要与版本无关,并且安装路径存储在版本子键中,所以基本上我要做的是检测最好的版本子键并从那里获取安装路径。

下面是获取注册表值的代码现在的样子:

FOR /F "skip=2 tokens=2,*" %%A IN ('REG.exe query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node......\6.30" /v "InstallLocation"') DO set "InstallPath= %%B"

基本上我不想依赖关键地址末尾的“6.30”部分,我该怎么做?

4

1 回答 1

1

由于我不知道您正在查看哪个确切的软件,我将参考 Winodws 7 x64 上的 Adob​​e Reader。

回答:

以下示例将输出父项中的所有子键。

for /f "delims=" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Adobe\Acrobat Reader"') do if not "%%~A"=="" echo.%%~nxA

输出:

9.5
10.0
11.0

样本:

从那里开始,只需记住最大的并在下一次查询值数据时使用它。

@echo off
setlocal EnableDelayedExpansion
set "xVersion="
set "xPath="

:: Retrieve Greatest Version
for /f "delims=" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Adobe\Acrobat Reader"') do (
    if not "%%~A"=="" if "%%~nxA" GTR "!xVersion!" set "xVersion=%%~nxA"
)

:: Validate Version
if "%xVersion%"=="" goto :eof

:: Retrieve Install Path
for /f "tokens=1,2,*" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Adobe\Acrobat Reader\%xVersion%\Installer" /v Path') do (
    set "xPath=%%~C"
)

:: Show Results
echo.%xPath%
endlocal

输出:

C:\Program Files (x86)\Adobe\Reader 10.0\

奖金:

如果您想验证%%~nxA是一个数字,这是我的批处理例程。

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:IsNumber <xReturn> <xInput> [xDelims]
:: Return true if the input is a base 10 number, else return false.
:::: Does not allow any seperators unless specified by xDelims. ,.[tab][space]
setlocal
if not "%~2"=="" set "xResult=true"
for /f "tokens=1 delims=1234567890%~3" %%n in ("%~2") do set xResult=false
endlocal & if not "%~1"=="" set "%~1=%xResult%"
goto :eof

:: Usage Example.
:: The variable xResult will be set to true if %%~nxA is a decimal number.
call :IsNumber xResult "%%~nxA" "."
于 2012-12-21T03:59:05.677 回答