PowerShellでパスからファイル名を取得する方法|ファイル名のみ、拡張子のみ取得する方法も紹介

目次

スポンサードリンク

PowerShellでファイルのパス文字列から、ファイル名や拡張子部分を取得するには、Get-ChildItem コマンドを使用します。

ファイル名を取得する基本構文

ファイル名を取得する際の基本的な構文は以下の通りです。ファイルパス部分はフルパスはもちろん、相対パスでも構いません。

(Get-ChildItem "<ファイルパス>”).Name

Get-ChildItemコマンドの引数として解析したいファイルのパスを渡し、Get-ChildItemコマンドを括弧で囲むことで、結果を配列として取得します。配列の .Name プロパティを参照することでファイル名を取得できます。

下記例では、指定したファイルの名称(sample.txt) を取得しています。

PS C:\Users\username> (Get-ChildItem C:\Users\username\sample.txt).Name
sample.txt

下記のように、相対パスの指定でもファイルが存在すればファイル名を取得することができます。

PS C:\Users\username> (Get-ChildItem ./sample.txt).Name
sample.txt

拡張子のみを取得する方法

拡張子のみを取得するコマンドは、ファイル名を取得するコマンドとほぼ同じです。参照するプロパティが .Name から .Extension に変わります。

下記のように、拡張子部分 .txt を取得することができます。

PS C:\Users\username> (Get-ChildItem ./sample.txt).Extension
.txt

拡張子を除くファイル名部分のみ取得する方法

拡張子を除くファイル名部分のみ取得したい場合は、.BaseName プロパティを参照しましょう。

PS C:\Users\username> (Get-ChildItem C:\Users\username\sample.txt).BaseName
sample

複数ファイルのファイル名を一括取得する方法

特定のフォルダ内のすべてのファイル名を取得したい場合は、Get-ChildItem と ForEach-Object を組み合わせたループ処理を実行します。下記例では、C:\Users\username 配下のファイル全てを対象に、ファイル名のみを列挙しています。

PS C:\Users\username> Get-ChildItem "C:\Users\username\" -File | ForEach-Object {
>>     $_.Name
>> }
.bash_history
.gitconfig
.lesshst
.test.bat.un~
copylog.txt
hello.txt
help
memo.txt
newfile.txt
newfile2.txt
posts.csv
sample.txt
sample2.txt
sample3.txt
test.bat
test.txt
tree.txt
_viminfo

まとめ

PowerShellでは Get-ChildItem コマンドを活用して、柔軟にファイル名や拡張子を取得することができます。ログ解析やバッチ処理など、さまざまな自動化タスクで活用できるテクニックです。是非、試してみてください。


コマンドプロンプトのポケットリファレンス:Windows11対応版
Windows環境で開発やシステム管理を行うエンジニアにとって、コマンドプロンプトの知識は非常に重要なスキルセットです。こちらの書籍は初心者にもわかりやすく網羅的です。手元に置いておきたい一冊です。

PowerShellの基礎を一通り学べるおすすめ書籍