PowerShell で親フォルダーの「フォルダー名」を取得する

ちょっとした PowerShell のスクリプトを書いていて、実行中のスクリプトの 「フォルダー名」 が取得したくなりました。

ちなみに親フォルダーの「フォルダー名」とは C:\Users\Hoge\Desktop\hogehoge.ps1Desktop の部分だけを指します。

簡単な話ですが、もっとイイ感じのやり方があると思ったら、実はなかったので、同じように疑心暗鬼になった人のためにメモしておきます。

順番に考える

実行するスクリプトは C:\Users\Hoge\Desktop\hogehoge.ps1 に配置してあるものとします。

順番にやっていきます。

スクリプトの実行パスを取得する

$commandPath = $MyInvocation.MyCommand.Path
Write-Output $commandPath

フルパス C:\Users\Hoge\Desktop\hogehoge.ps1 が得られます。

親フォルダーのパスを取得する

$parentDir = Split-Path $commandPath -Parent
Write-Output $parentDir

親フォルダーのパス C:\Users\Hoge\Desktop が得られます。

ファイル名を取得する

$filename = Split-Path $commandPath -Leaf
Write-Output $filename

ここでファイルパスを Split-Path -Leaf すれば、ファイル名 hogehoge.ps1 が得られます。

親フォルダーの「フォルダー名」を取得する

$parentDirName = Split-Path (Split-Path $commandPath -Parent) -Leaf
Write-Output $parentDirName

さらに親フォルダーのパスを Split-Path -Leaf すれば、親フォルダの「フォルダー名」 Desktop が得られます。

まとめ

親フォルダーの「フォルダー名」を取得するには Split-Path (Split-Path <パス> -Parent) -Leaf で OK

kenzauros