PowerShellでパイプでエクスプローラを開く

PowerShellでexplorerを開く方法はいくつか存在します。

  1. Start-Process . (エイリアス start .)
  2. Invoke-Item . (エイリアス ii .)
  3. Invoke-Item explorer .
  4. explorer .

1,2はディレクトリを指定するとそれに関連付けられたエクスプローラが開くという動作です。3,4はexplorer.exeの引数に.を指定しています。まぁ、他にもSystem.Diagnostics.Processを使うとか、COMやWin32経由とか色々ありますが、多くの場合不要なのでおいておきます。

パイプ(標準入力)からディレクトリを開きたい

さて、コマンドや実行ファイルの中には”c:"のように文字列のパスを標準出力に書き出すものがあります。「環境変数に格納されたパス」のようにシンプルなところから、「プロセスを検索して実行ファイルの親ディレクトリのパス」とか、「XML形式の設定ファイルを処理して中に含まれる何らかのパス」のように複雑な処理でも度々出現します。

それをエクスプローラに開くにはどうすれば良いいのか。一通り試してみました。

echo "c:/" | explorer
echo "c:/" | start
echo "c:/" | ii

親ディレクトリを開く

Split-Pathと組み合わせることで、例えば親ディレクトリを開くなんで事もできます。例えばVSCodeの親ディレクトリをエクスプローラで開く

(gcm code).source | split-path -parent | ii

カレントディレクトリにする

おまけ。cd(Set-Location)もちゃんとパイプを受け取るので以下のようにできます。

(gcm code).source | split-path -parent | cd

このように組み合わせによって案外色々なことができるのでうまく活用しましょう。