PowerShell: パスからフォルダ名、ファイル名、拡張子を取得

PowerShellでファイルのフルパスからフォルダ名部分、ファイル名のみ、 拡張子のみを取り出す方法を紹介します。 Split-PathコマンドレットやSystem.IO.Pathクラスのメソッドを使う事で取得できます。

Split-Pathコマンドレットは指定されたパスからドライブ名、フォルダ名、 ファイル名などを取り出すためのコマンドです。
System.IO.Pathクラスは.NET Frameworkのクラスで、 パスを分割したり統合したり多数のメソッドが使えます。 Split-PathとSystem.IO.Pathのどちらも知っておくと便利です。

フォルダ名を取得

Split-Pathコマンドレットを使ってフォルダ名を取得する場合、 -Parentオプションを指定して次のように記述します。

Split-Path D:\temp\test.txt -Parent

# 実行結果
D:\temp

またはSystem.IO.PathクラスのGetDirectoryNameメソッドを使います。

$s = "D:\temp\test.txt"
[System.IO.Path]::GetDirectoryName($s)

# 実行結果
D:\temp

ファイル名を取得

Split-Pathコマンドレットの場合は-Leafオプションを指定します。

Split-Path D:\temp\test.txt -Leaf

# 実行結果
test.txt

またはSystem.IO.PathクラスのGetFileNameメソッドを使います。

$s = "D:\temp\test.txt"
[System.IO.Path]::GetFileName($s)

# 実行結果
test.txt

拡張子を取得

拡張子のみを取得する場合、 System.IO.PathクラスのGetExtensionメソッドを使います。

$s = "D:\temp\test.txt"
[System.IO.Path]::GetExtension($s)

# 実行結果
.txt

Split-Pathコマンドレットには拡張子だけを取得するオプションはありません。 拡張子付きのファイル名を取得して「.ドット」で分割してもいいですが、 シンプルに[System.IO.Path]::GetExtension()を使った方が簡単です。

PowerShell