从最大的注册表子键读取批处理文件?

时间:2012-12-20 23:36:32

标签: scripting batch-file registry

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

以下是获取注册表值的代码:

  

FOR / F“skip = 2 tokens = 2,*”%% A IN('REG.exe查询“HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node ...... \ 6.30”/ v“InstallLocation”')DO set “安装路径= %% B”

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

1 个答案:

答案 0 :(得分:1)

由于我不知道您正在查看哪种软件,我将在Winodws 7 x64上引用Adobe 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" "."