PowerShellでファイル名・中身から文字列検索|Get-ChildItemとSelect-String

概要

本記事では、PowerShellでファイル名や中身から文字列検索する方法について解説していきます。

というのもLinuxの grep みたいに、フォルダ全体から特定の文字列を含むファイルをサクッと探したい時って結構ありますよね(- -;

実はWindowsでも標準のGet-ChildItemとSelect-Stringだけで同じことが簡単にできちゃいます。

ここではフォルダ内のファイル名検索とファイルの中身検索の両方を、コマンド例付きで紹介していきます!

別ツールを入れなくてもWindowsだけで完結するので便利です。
それではやっていきましょう!

目次

検索対象のフォルダ構成

このページではわかりやすく説明するために例を交えてコマンドの説明を行います。

例に登場するファイルたちは下記のようなフォルダ構成&内容です。

<初期状態のフォルダ>
  • folder1
    • aaa.txt
       内容:apple
    • bbb.txt
       内容:souppasta
  • folder2
    • ccc.json
       内容:banana
    • bbbaaaccc.json
       内容:agePasta
    • aaa.json
        内容:pasta

手順

フォルダ内のファイル名を検索

フォルダ内のファイル名に特定のワードが含まれる場合に、フルパスを取得します。

コマンド

1
Get-ChildItem -Path "[検索先のフルパス]" -Recurse -File | Where-Object { $_.Name -like "*[検索ワード]*" } | Select-Object -ExpandProperty FullName

例:ファイル名に"aaa"が含まれるファイルを検索する

1
Get-ChildItem -Path "C:\search_folder\" -Recurse -File | Where-Object { $_.Name -like "*aaa*" } | Select-Object -ExpandProperty FullName

上記のコマンドを実行すると、powershellの画面にファイルのフルパスが表示されます。

例のコマンドの場合、下記のファイルが出力されます。

<検索されるファイル>
  • folder1
    • aaa.txt
       内容:apple
  • folder2
    • bbbaaaccc.json
       内容:agePasta
    • aaa.json
        内容:pasta

フォルダ内のファイルの中身を検索

ファイル内に特定のワードが含まれる場合、フルパスを取得します。

コマンド

1
Select-String -Path "[検索先のフルパス]\*" -Pattern "[検索ワード]" -Recurse | Select-Object -ExpandProperty Path

例:ファイル内に"pasta"が含まれるファイルを検索する

1
Select-String -Path "C:\search_folder\*" -Pattern "pasta" -Recurse | Select-Object -ExpandProperty Path

先ほどと同様にコマンドを実行すると、ファイルのフルパスが表示されます。

例のフォルダ構成の場合、下記のファイルが出力されます。

<検索されるファイル>
  • folder1
    • bbb.txt
       内容:souppasta
  • folder2
    • aaa.json
        内容:pasta
この方法だと英字の大文字が含まれる場合、検索されません。
英字の大文字をあいまい検索したい場合は下記の方法を使用します。

ex)英字の大文字小文字を判別せず検索する方法

英字の大文字小文字を判別せず、あいまい検索したい場合は下記のコマンドを使用します。

この方法だとファイル名が多く出力されてしまうので、
ファイルに検索結果を出力するようにしています。

コマンド

1
Get-ChildItem -Path "[検索先のフルパス]" -Recurse -File | Select-String -Pattern "[検索ワード]" -CaseSensitive:$false | Select-Object -ExpandProperty Path | Out-File -FilePath "[検索結果の出力先]\[任意のファイル名].txt" -Encoding UTF8

例:ファイル内に"pasta"が含まれるファイルをあいまい検索する

1
Get-ChildItem -Path "C:\search_folder\" -Recurse -File | Select-String -Pattern "pasta" -CaseSensitive:$false | Select-Object -ExpandProperty Path | Out-File -FilePath "C:\search_folder\file_word_search.txt" -Encoding UTF8

コマンドを実行すると、文字列が存在するファイルのフルパスが指定したファイルに出力されるはずです。
(例:C:\search_folder\file_word_search.txt)

例のフォルダ構成の場合、下記のファイルが出力されます。

<検索されるファイル>
  • folder1
    • bbb.txt
       内容:souppasta
  • folder2
    • bbbaaaccc.json
       内容:agePasta
    • aaa.json
        内容:pasta

締め

こんな感じで、1日かかるタスクを1時間で終わらせました。

効率を重視するならこういったコマンドは知っておくべきですよね(^^

自分のブログではこういったコマンドをどんどん紹介していきます。
良ければ他の記事も見ていってください!

以上となります
ファイル検索の中身を手動で検索するのはエンジニアではありません。
それではお疲れさまでした。