ショートカットを実行したフォルダパスをスクリプトに反映した


概要

PowerShellスクリプトを一つのフォルダで管理して、ショートカットを使うフォルダ内に作成して使用することがあるためパス入力が手間だった。ショートカットの実行時にフォルダパスを反映することで解消した。

リンク先 (cmd)
C:\Windows\System32\cmd.exe /C pwsh "C:\Users\%username%\Documents\PowerShell\なんとか.ps1" "%CD%"
コマンドと引数
CMD /C    "文字列" に指定されたコマンドを実行した後、終了します。
CMD /K    "文字列" に指定されたコマンドを実行しますが、終了しません。
CMD /Q    エコーをオフにします。
pwsh      ver.5 まで powershell / ver.6 以降は pwsh
%CD%      実行したフォルダのパスを取り出す変数

実装

ショートカットに書き込む

確認のため /C/Q /K に置き換えて実行

テスト

$Arg[0]でパスを取り出す

なんとか.ps1
write-host "現在のディレクトリ"
get-location # (*1)
write-host "`$Args[0]の中身" $Args[0]
set-location $Args[0]
write-host "セットしました"
get-location # (*1)

Read-Host "終わります"
EXIT
実行結果
現在のディレクトリ
# 空
$Args[0]の中身 E:\folder
セットしました
終わります: # Enterを押す
Path # (*1)
----
E:\folder # (*2,3)
E:\folder


D:\folder>

*1 get-locationコマンドがRead-Hostの後に実行される
*2 パスに[ ]が含まれる場合-LiteralPathを指定
*3 ドライブ直下の場合 (例)C:" となるので"を削除する
 %CD% ではスペースがあるとパスが切れる

補足

スクリプトの実行ポリシーが許可されていない場合 -ExecutionPolicy RemoteSigned

C:\Windows\System32\cmd.exe /C pwsh -ExecutionPolicy RemoteSigned "C:\Users\%USERNAME%\Documents\PowerShell\なんとか.ps1" "%CD%"