Windowsでフォルダ内の文字列検索をしてファイルに出力する方法

特定の文字列を含むファイルを探したいとき、Unix系ではgrepを使うと実現できます。Windowsではコマンドプロンプトから「findstr」「find」が使えましたが、UTF8が利用できませんでした。PowerShellの「Select-String」を使えばUTF8のファイルを検索することができます。 ## PowerShellで「Select-String」(sls)を使う ### 使い方 PowerShellではSelect-Stringを使うと、フォルダ内のファイルから特定の文字列を持つ行を検索できます。検索テキストには正規表現が利用可能です。対象ファイルの文字コードをUTF8として、大文字と小文字の区別なく検索します。
select-string "検索テキスト" *.txt
Select-Stringは短縮形slsが利用できます。
sls "検索テキスト" *.txt
サブフォルダも含めて検索するには、dir -recurseを使います。
sls "検索テキスト" (dir -recurse *.txt)
### ファイルに保存 次のようにするとリダイレクトでファイルに保存できます。ただし、出力ファイルはUTF16で、改行による整形が行われます。
sls "検索テキスト" (dir -recurse *.txt) > result.log
出力ファイルの文字コードや改行位置を変えるには、パイプでOut-Fileを利用します。UTF8は「BOMあり」になります。
sls "検索テキスト" (dir -recurse *.txt) | out-file result.log utf8 -width 9999
改行位置については次の方法でも変更できます。PowerShellのウィンドウ左上のアイコンを右クリック→プロパティ→「レイアウト」タブを開く。「画面バッファーのサイズ」にある「幅」の数値を変更します。この方法では、画面上の折り返し位置も変わります。 ### 主なオプションなど 大文字・小文字を区別する。
sls "検索テキスト" *.txt -casesensitive
文字列の単純一致を検索する(正規表現を使用しない)。
sls "検索テキスト" *.txt -simplematch
検索に使用する文字コードを変更する。UTF7、UTF8、UTF32、ASCII、Unicode、BigEndianUnicode、Default、OEMが指定できる。
sls "検索テキスト" *.txt -encoding unicode
slsのヘルプを表示する。
get-help sls
## コマンドプロンプトで「findstr」を使う ### 使い方 文字コードがShift_JISの場合は、コマンドプロンプトからfindstrで検索できます。既定では、大文字と小文字を区別して検索し、結果には行番号が付きません。検索テキストには一部の正規表現が利用可能ですが、単純な指定では空白を含んだ文字列は検索できません。(空白を含めると、複数のキーワードを指定したことになります)
findstr "検索テキスト" *.txt
次のようにすると、大文字と小文字を区別なく検索し、行番号をつけて表示します。
findstr /i /n "検索テキスト" *.txt
サブフォルダも含めて検索します。
findstr /s /i /n "検索テキスト" *.txt
次のようにするとリダイレクトでファイルに保存できます。
findstr /s /i /n "検索テキスト" *.txt > result.log
文字列の単純一致を検索する(正規表現を使用しない)場合は「/l」を追加します。 ### 空白を含む場合 空白を含む場合は、/rと/cを使うと正規表現で検索できます
findstr /r /c:"検索テキスト" *.txt
次のようにすると、大文字と小文字を区別なく検索し、行番号をつけて表示します。
findstr /i /n /r /c:"検索テキスト" *.txt
サブフォルダも含めて検索します。
findstr /s /i /n /r /c:"検索テキスト" *.txt
次のようにするとリダイレクトでファイルに保存できます。
findstr /s /i /n /r /c:"検索テキスト" *.txt > result.log
文字列の単純一致を検索する(正規表現を使用しない)場合は「/r」を省略します。 ### そのほか findstrのヘルプを表示します。
findstr /?
コマンドプロンプトには、機能の少ない「find」もあります。正規表現は使えません。詳細はヘルプをご覧ください。
find /?