PowerShell を使ってパスからファイル名を抽出する方法
- 
          
            PowerShell でパスからファイル名を抽出するために Split-PathCmdlet を使用する
- PowerShell でパスからファイル名を抽出するために.NET の Path クラスメソッドを使用する
- 
          
            PowerShell でパスからファイル名を抽出するために Get-ItemとGet-ChildItemCmdlet を使用する
- 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 は効果的なファイル操作のための堅牢なツールセットを提供します。
