PowerShell を使ってパスからファイル名を抽出する方法

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

ファイルパスは、システム上のファイルの場所を示します。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-ItemGet-ChildItem Cmdlet を使用する

PowerShell では、Get-ItemGet-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-ObjectSystem.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 は効果的なファイル操作のための堅牢なツールセットを提供します。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - PowerShell File