PowerShell を使用してファイル拡張子を取得する方法
-
PowerShell の
Split-Path
を使用してファイル拡張子を取得 -
PowerShell の
Get-ChildItem
コマンドレットを使用してファイル拡張子を取得 -
PowerShell の
System.IO.Path
を使用してファイル拡張子を取得 -
PowerShell の
System.IO.FileInfo
を使用してファイル拡張子を取得 - 結論

通常、PowerShell スクリプトで作業する際には、フルパスからファイル名を抽出する必要があります。例えば、スクリプトがフルファイルパスを受け取り、ファイル拡張子のみを取得したい場合です。
この包括的なガイドでは、PowerShell を使用してファイル拡張子を抽出するさまざまな手法を掘り下げます。これは数多くのスクリプトシナリオにおいて基本的でありながら重要なタスクです。この記事の各セクションでは、Split-Path
のシンプルさから、より高度な使用法である .NET
フレームワークおよび System.IO.FileInfo
クラスに至るまで、異なるアプローチが紹介されています。
PowerShell の Split-Path
を使用してファイル拡張子を取得
この文脈で Split-Path -Leaf
を使用する主な目的は、与えられたパスからファイル名とその拡張子を分離することです。この方法は、ファイル名または相対パスのみで作業する場合に特に効果的です。
ファイル名が取得されると、文字列分割メソッドを使用して拡張子を簡単に抽出できます。
例のコード:
powershellCopy# Define the file path
$filePath = "sample.txt"
# Extract the file extension
$extension = (Split-Path -Path $filePath -Leaf).Split(".")[1]
# Output the extension
Write-Output $extension
このスクリプトでは、まずファイル名 $filePath
を定義します。Split-Path -Path $filePath -Leaf
コマンドはファイル名(sample.txt
)を分離します。
次に、この文字列をドットで分割し、最初の要素には拡張子のないファイル名(sample
)、2 番目の要素には拡張子(txt
)が入った配列が得られます。この配列の 2 番目の要素に [1]
でアクセスすることで、拡張子を取得します。
最後に、Write-Output
を使用して拡張子を表示します。
出力:
PowerShell の Get-ChildItem
コマンドレットを使用してファイル拡張子を取得
Get-ChildItem
コマンドは、1つまたは複数の指定された場所のアイテムを取得します。例えば、オブジェクトがコンテナの場合、そのコンテナ内のもの、すなわち子アイテムを取得します。
場所は、ディレクトリなどのファイルシステムや、別の Windows PowerShell プロバイダーによって公開されたサイトである可能性があります。Get-ChildItem
コマンドは、ファイルシステムドライブ内のディレクトリ、サブディレクトリ、およびファイルを取得します。
Get-ChildItem
コマンドレットはファイルを扱うため、照会されたファイルの拡張子を取得するためにエクスポートできる PowerShell プロパティ属性があります。Split-Path
コマンドレットとは異なり、この方法はファイル名にドット文字が含まれていても、拡張子を適切に取得できます。
例のコード:
powershellCopyGet-ChildItem 'sample.txt' | Select-Object Extension
このスクリプトでは、Get-ChildItem 'sample.txt'
が sample.txt
のファイルオブジェクトを取得します。Get-ChildItem
コマンドレットは通常、ディレクトリ内のアイテムをリストするために使用されますが、特定のファイル名を指定することで、そのファイルのファイルオブジェクトを返します。
このオブジェクトにはさまざまなプロパティが含まれており、その 1つがファイルの拡張子です。
Get-ChildItem
からの出力はその後、Select-Object Extension
にパイプされます。このコマンドレットはファイルオブジェクトのプロパティをフィルタリングし、Extension
プロパティのみを出力します。
出力:
PowerShell の System.IO.Path
を使用してファイル拡張子を取得
次のアプローチは .NET
フレームワークのクラスに基づいています。PowerShell スクリプトで .NET
フレームワークのクラスを使用することは一般に推奨されませんが、特にネイティブ PowerShell コマンドが利用可能な場合、この特定のユースケースには適切である可能性があります。
以下の例では、ファイル名が与えられた場合、System.IO.Path
クラスの GetExtension
静的メソッドを使用します。
例のコード:
powershellCopy[System.IO.Path]::GetExtension("sample.txt")
提供された例では、.NET
クラス [System.IO.Path]
が使用され、その静的メソッド GetExtension()
が呼び出されます。引数として"sample.txt"
をメソッドに渡します。
このメソッドは文字列を分析し、ファイルの拡張子を表す部分文字列を抽出します。このメソッドの美しさは、ファイル名やパスを処理するシンプルさと直接的なアプローチにあります。ファイルがファイルシステム上に存在する必要がないからです。
出力:
PowerShell の System.IO.FileInfo
を使用してファイル拡張子を取得
この文脈での System.IO.FileInfo
の主な用途は、特定のファイルについての詳細情報、例えばその拡張子を取得することです。この方法はファイルのメタデータが重要で、基本的なファイル処理だけでは不十分なスクリプトに特に役立ちます。
例のコード:
powershellCopy# Create a FileInfo object for the specified file
$FileInfo = New-Object System.IO.FileInfo('sample.txt')
# Access the extension property of the FileInfo object
$Extension = $FileInfo.Extension
# Print the extension
Write-Output $Extension
このスクリプトでは、まず sample.txt
のために System.IO.FileInfo
オブジェクトを作成するプロセスを開始します。このオブジェクトは、ファイル名、ディレクトリ、サイズ、そして重要な拡張子を含む、ファイルに関するさまざまな詳細をカプセル化します。
FileInfo
オブジェクトの .Extension
プロパティにアクセスすることで、ファイルの拡張子を抽出します。このプロパティは、先頭のピリオドを含む文字列(例えば .txt
)として拡張子を返します。
出力:
結論
PowerShell におけるファイル拡張子のニュアンスをナビゲートすることは、各々独自の利点やアプリケーションを持つ技術のスペクトルを明らかにします。この探求は、シンプルで迅速な取得に理想的な Split-Path
と Get-ChildItem
の使用から、複雑さと能力のバランスが優雅に達成される .NET
フレームワークの深い領域、System.IO.Path
および System.IO.FileInfo
に至るまで行きました。
ルーチンタスクの自動化、大量ファイル操作の実行、システム管理のための高度なスクリプトの開発にかかわらず、これらの方法を理解することはあなたの PowerShell ツールキットを豊かにします。ここで議論された多様なアプローチは、PowerShell の適応性と堅牢性を強調し、初心者と経験豊富なスクリプターの両方が精度と効率でソリューションをカスタマイズできる力を与えます。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn