2012-12-20 61 views
0

我試圖修改我的批處理腳本來獲取某個軟件的安裝路徑,但它需要獨立於版本,並且安裝路徑存儲在版本子密鑰中,所以基本上我所要做的是檢測最大的版本子密鑰並從那裏獲取安裝路徑。從最大註冊表子鍵讀取批處理文件?

以下是用於獲取註冊表值的代碼看起來像現在:

FOR/F 「跳過= 2個令牌= 2 *」 %% A IN('REG.EXE查詢「HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node ...... \ 6.30「/ v」InstallLocation「')DO設置」InstallPath = %% B「

基本上我想不依賴於」6.30「部分的結尾的關鍵地址,我該怎麼做?

回答

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" "." 
相關問題