Powershellで特定のフォルダの拡張子の一覧を取得する
特定のフォルダ配下に含まれるファイルの拡張子の一覧を取得するための方法のメモ
Powershellを使ってファイルの拡張子を得るにはいくつか方法があって、例えばSystem.IO.Pathクラスを使う手もあったりするが、それよりはSystem.IO.FileInfoクラスを生成してしまった方が楽だし応用が効くように思う。
PS D:\> Get-ChildItem -Recurse -File | %{$_.Extension} | Sort-Object -CaseSensitive | Get-Unique .log .txt
やっていることは以下のような流れ
Get-ChildItem -Recurse -File
でカレントディレクトリのファイルをサブディレクトリ含めて取得- FileInfoのExtentionフィールドで拡張子を取得して
Sort-Object -CaseSensitive
で大文字小文字を区別してソートしたうえでGet-Unique
でユニークにする(重複を除く)
なお、Get-ChileItem
のFileパラメータはv3からしか使えないので、v2の場合はWhere-Objectの抽出条件でFileInfoのAttributeか、PSIsContainerを使って絞りこむことで代替する。
PS D:\SandBox> Get-ChildItem -Recurse | Where-Object{$_.Attribute -ne "Directory" } | %{$_.Extension} | Sort-Object -CaseSensitive | Get-Unique PS D:\SandBox> Get-ChildItem -Recurse | Where-Object{$_.PSIsContainer -eq $false } | %{$_.Extension} | Sort-Object -CaseSensitive | Get-Unique
また、特定のファイルの拡張子を取得するときはGet-Item
でFileInfoのオブジェクトを取得すればよい。Alias(gi
)を使うと楽に書ける。
PS D:\> $(Get-Item .\random.log).Extension
.log