PowerShellで ps1拡張子をPowerShellに登録する – スペース対応
PowerShellの スクリプト拡張子(.ps1)をダブルクリック等しても動作するよう関連づけするのに、
一般的に
New-Item registry::HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command -value '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "%1"' -force
を実行するとなっていますが、これだとディレクトリ名にスペースがあるとうまく動きません。
顕著な例ではC:\temp\hoge.ps1 だと動くのに、 C:\My Documents\hoge.ps1 だとダブルクリックしても動作しません。
これを下記で正しく実行できるようになります。
New-Item registry::HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\open\command -value '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "& ''%1''"' -force
要は、PowerShell.exe の引数に “%1” ではなく、 “& ‘%1’ “を渡します。
& は呼び出し演算子。このリンク先のCall 演算子 をご参照ください。
クオーテーションの数が違うのは、「単一引用符で囲まれた文字列に単一引用符を含めるため」です。2連続する引用符でエスケープされます。
このリンク先の「単一引用符で囲まれた文字列に単一引用符を含めるには」など参照にしてください。
HTMLが表示で書き換える問題もあって、書いても間違う可能性があるので、画面キャプチャを置いておきます。
Set-ExecutionPolicy -exec RemoteSigned なども忘れないこと。
パスに空白を含むスクリプトファイル(.ps1)を実行する
パスに空白を含むスクリプトファイル(.ps1)を実行する
”C:Windowssystem32WindowsPowerShellv1.0powershell.exe”
→ディレクトリ区切り子が削れててしまっており、誤解を招く。公にすべきでない。
“& “%1″”
“& ‘%1′” 渡します。
→ どっちが正しいのか曖昧。こちらも間違っており、公にすべきでない。
“\” が消えていてすみません。(『公にすべきでない』ですか。。)
引数のクオーテーションとダブルクォーテーションについては、説明がなかったので追加しておきました。