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 に答える