shell\open\command のファイルパスを加工して渡す方法
shell\open\command のファイルパス を 8.3形式の ショートファイルパスにして アプリを起動させる方法が知りたかったので、色々実験した。 ・ω・
これも、某大手アプリが 起動ソフト.exe "%1" とすると、ファイル名として "(ダブルクオート) まで解釈する酷い作りになっていたせいなのだが…。
1. コマンドライン
cmd /q /c for /f "delims=" %%i in ("%1") do ( 起動ソフト.exe %%~fdsi ) |
2. PowerShell
cmd /c for /f "delims=" %%a in ('where powershell.exe') DO @(%%a
-WindowStyle Hidden -Command "$fso=New-Object -comObject Scripting.FileSystemObject; 起動ソフト.exe ($fso.GetFile(\"%1\")).ShortPath") |
注: 起動ソフト名 のパス の \ は エスケープして \\ にする必要がある
shell\open\command レジスタに登録する場合、 powershell.exe は直接起動できないため、 where powershell.exe を利用してフルパスを取得してから実行している。
Comments