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 なども忘れないこと。

宍道湖
DSC_0560-1000.JPG

 

  1. ”C:Windowssystem32WindowsPowerShellv1.0powershell.exe”
    →ディレクトリ区切り子が削れててしまっており、誤解を招く。公にすべきでない。

    “& “%1″”
    “& ‘%1′” 渡します。
    → どっちが正しいのか曖昧。こちらも間違っており、公にすべきでない。

    • “\” が消えていてすみません。(『公にすべきでない』ですか。。)

      引数のクオーテーションとダブルクォーテーションについては、説明がなかったので追加しておきました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA