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文の書式が実に難解である。