PowerShell を使ってパスからファイル名を抽出する方法
-
PowerShell でパスからファイル名を抽出するために
Split-Path
Cmdlet を使用する - PowerShell でパスからファイル名を抽出するために.NET の Path クラスメソッドを使用する
-
PowerShell でパスからファイル名を抽出するために
Get-Item
とGet-ChildItem
Cmdlet を使用する - PowerShell でパスからファイル名を抽出するために正規表現を使用する
- PowerShell でパスからファイル名を抽出するために文字列操作を使用する
-
PowerShell でパスからファイル名を抽出するために
System.IO.FileInfo
クラスを使用する - 結論

ファイルパスは、システム上のファイルの場所を示します。PowerShell でファイルを操作しているとき、パスからファイル名だけを取得する必要がある場合があります。
PowerShell でファイルのパスを取得する方法はいくつかあります。このチュートリアルでは、PowerShell を使ってファイルパスからファイル名を抽出する方法を学びます。
PowerShell でパスからファイル名を抽出するために Split-Path
Cmdlet を使用する
PowerShell では、Split-Path
cmdlet は、特定のパスセグメントを分離するための便利なツールです。親フォルダー、サブフォルダー、ファイル名、またはファイル拡張子など、Split-Path
を使用すると、これらの要素をターゲットにして表示できます。
拡張子付きのファイル名を抽出する
パスから拡張子付きのファイル名を取得するには、-Leaf
パラメーターを使って Split-Path
コマンドを実行します:
Split-Path C:\pc\test_folder\hello.txt -Leaf
出力:
hello.txt
拡張子なしのファイル名を取得する
拡張子なしのファイル名が必要な場合、-LeafBase
パラメーターが役立ちます。ただし、このパラメーターは PowerShell バージョン 6.0 以降で利用可能であることに注意してください:
Split-Path C:\pc\test_folder\hello.txt -LeafBase
出力:
hello
PowerShell でパスからファイル名を抽出するために.NET の Path クラスメソッドを使用する
.NET では、Path
クラスは、指定されたパスからファイル名と拡張子を簡単に抽出するための有用なメソッドを提供します。これらの機能を例を交えて探ってみましょう。
GetFileName
を使用して拡張子付きファイル名を抽出する
Path
クラスの GetFileName
メソッドは、指定されたパスから拡張子付きのファイル名を取得します。パス C:\pc\test_folder\hello.txt
を使ってこれを示しましょう:
[System.IO.Path]::GetFileName('C:\pc\test_folder\hello.txt')
出力:
hello.txt
GetFileNameWithoutExtension
を使用して拡張子なしのファイル名を取得する
拡張子なしのファイル名を抽出するには、GetFileNameWithoutExtension
メソッドを使用できます。これは、ファイルタイプを除外したファイル名が必要なときに特に便利です:
[System.IO.Path]::GetFileNameWithoutExtension('C:\pc\test_folder\hello.txt')
出力:
hello
PowerShell でパスからファイル名を抽出するために Get-Item
と Get-ChildItem
Cmdlet を使用する
PowerShell では、Get-Item
と Get-ChildItem
cmdlet は、ファイルやディレクトリを操作するための重要なツールであり、指定された場所の項目に関する特定の情報を抽出できます。
これらの cmdlet を使用して、拡張子の有無にかかわらず、指定されたパスからファイル名を抽出する方法を見てみましょう。
Get-Item
を使用して拡張子付きファイル名を抽出する
Get-Item
cmdlet は、指定された項目に関する詳細情報を取得し、そのディレクトリ、モード、最終書き込み時刻、長さ、および名前を含みます。拡張子付きのファイル名を抽出するには、Get-Item
とともに .Name
プロパティを使用できます。
特定のパス C:\pc\test_folder\hello.txt
を使用してこれを示しましょう:
(Get-Item C:\pc\test_folder\hello.txt).Name
出力:
hello.txt
Get-Item
を使用して拡張子なしのファイル名を取得する
拡張子なしのファイル名だけを抽出する必要がある場合、Get-Item
に .BaseName
プロパティを組み合わせて使用できます。これにより、提供されたパスからファイル名だけを分離できます:
(Get-Item C:\pc\test_folder\hello.txt).BaseName
出力:
hello
Get-ChildItem
でメソッドを適用する
このアプローチは、指定された場所の項目に関する情報を取得する Get-ChildItem
cmdlet を使用する際にも適用できます。拡張子の有無にかかわらずファイル名を抽出する方法は次のとおりです:
(Get-ChildItem C:\pc\test_folder\hello.txt).Name
(Get-ChildItem C:\pc\test_folder\hello.txt).BaseName
出力:
hello.txt
hello
PowerShell でパスからファイル名を抽出するために正規表現を使用する
正規表現を使用して、PowerShell のパスからファイル名を抽出することもできます。.NET の Regex
クラスは、パターンマッチングと操作のための強力なツールを提供します。
これがどのように機能するか見てみましょう:
# Define the path
$path = "C:\pc\test_folder\hello.txt"
# Use regular expression to extract the filename
$filename = [System.Text.RegularExpressions.Regex]::Match($path, '\\([^\\]+)$').Groups[1].Value
$filename
出力:
hello.txt
この例では、最後のバックスラッシュの後のテキストをキャッチするために正規表現を使用しています。これはファイル名とその拡張子を表します。
正規表現'\\([^\\]+)$'
は次のように分解できます:
\\
:パス内のバックスラッシュに一致します。([^\\]+)
:バックスラッシュでない 1 文字以上の文字をキャプチャします(拡張子付きファイル名を表します)。$
:一致が文字列の末尾で発生することを指定します。
Regex
クラスの Match
メソッドを使用して、パスに正規表現を適用します。
結果の一致には、拡張子付きのファイル名が含まれます。Groups[1].Value
を使用して、目的のファイル名を抽出します。
PowerShell でパスからファイル名を抽出するために文字列操作を使用する
文字列操作技術を使用して、パスからファイル名を抽出することもできます。たとえば、LastIndexOf
メソッドを使用してバックスラッシュの最後の出現を見つけ、ファイル名を抽出することができます。
# Define the path
$path = "C:\pc\test_folder\hello.txt"
# Find the index of the last backslash
$lastBackslashIndex = $path.LastIndexOf("\") + 1
# Extract the filename
$filename = $path.Substring($lastBackslashIndex)
$filename
出力:
hello.txt
ここで、LastIndexOf
メソッドを使用して、パス内の最後のバックスラッシュ(\
)の出現位置を決定し、ファイル名が始まる位置を特定します。
$lastBackslashIndex = $path.LastIndexOf("\") + 1
:この行は最後のバックスラッシュのインデックスを計算し、1 を加えてバックスラッシュの後の文字から抽出を開始できるようにします。
次に、Substring
メソッドを使用して、最後のバックスラッシュの後のインデックスから文字列の末尾までファイル名を抽出します。
$filename = $path.Substring($lastBackslashIndex)
:ここで、計算されたインデックスを使用してSubstring
を利用し、ファイル名を抽出します。
PowerShell でパスからファイル名を抽出するために System.IO.FileInfo
クラスを使用する
System.IO.FileInfo
クラスは、ファイル名を含むファイル情報にアクセスするためのプロパティを提供します。FileInfo
オブジェクトを作成し、その後 Name
プロパティにアクセスしてファイル名を取得できます。
# Define the path
$path = "C:\pc\test_folder\hello.txt"
# Create a FileInfo object
$fileInfo = New-Object System.IO.FileInfo $path
# Extract the filename
$filename = $fileInfo.Name
$filename
出力:
hello.txt
この例では、New-Object
と System.IO.FileInfo
クラスを使用して FileInfo
オブジェクトを作成し、ファイル関連のプロパティとメソッドへのアクセスを可能にしています。
$fileInfo = New-Object System.IO.FileInfo $path
:このコード行は、提供されたパスに基づいてFileInfo
オブジェクトを構築します。
次に、FileInfo
オブジェクトの Name
プロパティを利用してファイル名を抽出します。
$filename = $fileInfo.Name
:ここで、FileInfo
オブジェクトのName
プロパティにアクセスしてファイル名を取得します。
結論
このチュートリアルでは、PowerShell のパスからファイル名を抽出するためのさまざまな方法を探りました。Split-Path
のような組み込みの cmdlet を使用することから、正規表現や文字列操作を利用することまで、特定の要件に基づいて選択できる範囲のオプションがあります。
これらの技術を理解することで、PowerShell におけるファイルパスの処理や重要なファイル情報の抽出における熟練度が向上します。組み込みの cmdlet のシンプルさを好む場合でも、正規表現の柔軟性を好む場合でも、PowerShell は効果的なファイル操作のための堅牢なツールセットを提供します。