PowerShellでファイル一覧を絞り込む|Get-ChildItemのFile・Filter・Recurse

  • 公開:2026.10.17
  • 更新:2026.10.16
  • Windows
PowerShellでファイル一覧を絞り込む|Get-ChildItemのFile・Filter・Recurse

ログを調べる前に、どのファイルがあるかだけを一覧にしたいことがあります。エクスプローラーでは下の階層や隠しファイルを見落としやすいとき、PowerShellのGet-ChildItemで場所と条件を指定できます。

以下はWindows PowerShell 5.1とPowerShell 7のファイルシステムで使う例です。作業フォルダーにlogs[demo]を用意し、直下にapp.logとnotes.txt、その下のarchiveにold.logがある構成で結果を説明します。


ファイルと拡張子を絞る

Get-ChildItem -LiteralPath '.\logs[demo]' -File -Filter '*.log' |
    Select-Object Name, Length

この構成ではapp.logが表示されます。-Fileはファイルだけを選び、-Filterは名前の条件をファイルシステム側へ渡します。Lengthはバイト単位のファイルサイズで、サンプルの内容によって値が変わります。

フォルダー名の角括弧をパターンとして解釈させたくないので、場所の指定には-LiteralPathを使っています。場所をそのまま指定し、ファイル名の条件を-Filterへ分けると、役割が分かりやすくなります。

下の階層も一覧にする

Get-ChildItem -LiteralPath '.\logs[demo]' -File -Filter '*.log' -Recurse |
    Sort-Object FullName | Select-Object Name

-Recurseを付けるとarchive内も検索され、app.logとold.logが対象になります。広いドライブ全体では処理量が増えるため、まず必要なフォルダーを指定すると調べやすくなります。同名のファイルを見分けたいときは、選択する項目にFullNameを加えてください。

隠しファイルを含める

Get-ChildItem -LiteralPath '.\logs[demo]' -File -Force |
    Sort-Object Name | Select-Object Name

Windowsの隠し属性が付いたファイルも見たい場合は-Forceを使います。これはアクセス権を追加する引数ではありません。アクセスが拒否された場所は、そのまま読み取りできない場合があります。エラーを隠して「何もない」と判断しないことが大切です。

フォルダーだけを表示する

Get-ChildItem -LiteralPath '.\logs[demo]' -Directory |
    Select-Object Name

サンプルではarchiveが表示されます。ファイルを探すときは-File、フォルダーを探すときは-Directoryを使うと、結果を後から振り分ける手間を減らせます。

相対的な名前だけを取得する

Get-ChildItem -LiteralPath '.\logs[demo]' -File -Filter '*.log' -Recurse -Name |
    Sort-Object
app.log
archive\old.log

-Nameを付けると、ファイル情報オブジェクトではなく名前の文字列が返ります。再帰検索では基点からの相対的な名前になるため、サイズなどを後から選びたい場合は-Nameを付けない結果を使ってください。

一致するファイルがない場合、通常は結果が返りません。パスの誤りや読み取りエラーがある場合とは分けて調べます。一覧の後でログの本文を検索したい場合は、Select-Stringへ対象ファイルのパスを渡す流れになります。

参考資料

このブラウザからの自分のアクセスを解析から除外できます。