スポンサーリンク

Windowsバッチでレジストリからexcel.exeのパスを取得

Windowsバッチでexcel.exeのパスを知りたい。Officeが32bit、64bitによってパスが違ったりするので。PowerShellを組み合わせる方法とかいろいろあったが、Windowsのコマンドのみで取得する方法を考えた。

 

①基本コマンド

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe" /v ""

<結果1>

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe

    (既定)    REG_SZ    C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE

 ↑この結果から「C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE」だけを取りたい。

 

①まずレジストリのデータ値を取得

for /f "usebackq delims=" %A in (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\excel.exe" /v ""`) do set REG1=%A

echo %REG1%

↑この段階ではまだ先頭にいろいろついている。

 

レジストリのデータ値からパスの部分だけを取得する

for /f "tokens=2*" %A in ("%REG1%") do set REG_RESULT=%B

tokens=2は「REG_SZ」で%Aに入る。

「*」が半角スペースで区切って3番目以降の文字列「C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE」を示しており、%Bに入る。

 

※上記コマンドはコマンドプロンプト用。バッチファイルに書くときは変数%Aを%%Aとすると動く。あと%Bを%%Bに

 

各所で言われているがfor文の書式が実に難解である。