findstr の便利なオプション一覧 | Windows

findstr コマンドの便利なオプションに関して説明します。主にコマンドプロンプトやバッチファイルで使用しますが、覚えておくと作業効率がとてもよくなるオプションが多数あるため、是非マスターしてください。

スポンサーリンク

findstrとは

スポンサーリンク

基本

基本は"検索する文字列" と "検索対象のファイル"を順番に指定します。
findstr <検索文字列> <対象ファイル>

findstr abc 検索対象.txt
(*)デフォルトでは検索対象は固定の文字列(リテラル)として扱われる。これは/C:オプションと同じ。
正規表現として指定するなら /R オプションを使用する。

ワイルドカード

対象ファイルにワイルドカードを指定して一気の検索も可能
findstr aaa *

findstr aaa c:\temp\*

戻り値

findstr の結果「見つかった」「見つからない」「文法エラー」は%ERRORLEVEL%でチェック可能。
見つかった場合は 0
C:\>findstr "zzz" 検索対象.txt
zzz

C:\temp>echo %ERRORLEVEL%
0
見つからない場合は 1
C:\>findstr /z
FINDSTR: /z は無視されました。
FINDSTR: コマンド ラインが正しくありません

C:\>echo %ERRORLEVEL%
2
移行はバッチファイルで判定するサンプルプログラム。
@echo off
findstr /DD xaaa 検索対象.txt

if %ERRORLEVEL% == 0 echo 見つかりました
if %ERRORLEVEL% == 1 echo 見つかりません
if %ERRORLEVEL% == 2 echo コマンドラインの文法エラー

スポンサーリンク

パイプで受け取る

systeminfo の出力をパイプで受け取り、BIOSで検索する。
systeminfo | findstr BIOS

大文字小文字を区別しない

findstr /I abc 検索対象.txt
ABc
abC

スペースを含む言葉の検索

findstr /C:"abc def" 検索対象.txt
/C オプションを指定しないでスペースを入れると、複数ワードの検索として解釈される。
/Cの後にコロンが必要な点に注意。"FINDSTR: /C は無視されました。"とエラー出力される場合はコロンを忘れている。

行の先頭とマッチする

行の先頭の abc とマッチ。
findstr -R "^abc" 検索対象.txt

行の最後のマッチ

行の最後の abc とマッチ。
findstr -R "abc$" 検索対象.txt

正規表現で検索

findstr /R "[abc]." 検索対象.txt

スペースを含む正規表現

ちょっと特殊。相反する /R と /C のオプションを指定する。
findstr /R /C:"[0-9]. [0-9]." 検索対象.txt
123 4567
などがヒットする

結果に行番号を出力

結果に行番号を出力する。要するに検索対象.txt 内での行数。
findstr /N abc 検索対象.txt
1: abc def
6: abc1

サブディレクトリ以下も検索する

/Sで現在のフォルダのサブフォルダも再帰的に検索する
findstr /S "aaa" 検索対象.txt

エスケープ

\ によりエスケープを行う。(参考までコマンドプロンプトでのエスケープは ^ なので注意)


\[
\]
\.
\*
\^
\$
\-

対象をテキストファイルに限定

/S で一括で検索する場合は、exeなどバイナリファイルまで対象となり出力が崩れる。
/Pオプションを指定すると、バイナリファイルは除外される。(ヘルプでは「印刷不可能な文字を含むファイルをスキップ」と呼んでいる)
findstr /S /P abc *

検索対象に複数のフォルダを指定

/Dオプションを指定し、複数フォルダをセミコロンで指定する。aaaを で検索
findstr /D:c:\temp;c:\temp2 aaa *
さらに/Sで再帰的にサブフォルダも検索
findstr /S /D:c:\temp;c:\temp2 aaa *

完全一致

完全に一致する行のみ
findstr /X aaa 検索対象.txt
多分以下と同じ
findstr /X /R "^aaa$" 検索対象.txt

逆(含まない)

findstr /V aaa 検索対象.txt

or検索

スペースを含むと or となる。スペースそのものを検索したい場合は/C:"<検索文字>"
aaa あるいはabcで検索
findstr "aaa abc" 検索対象.txt

指定したファイルから検索文字を読み取る

/G

指定したファイルからファイル一覧を読み取る

/F

単語の先頭を指定

単語の先頭が aaa で始まるもの。
findstr /R "\<aaa" 検索対象.txt

単語の終わりを指定

単語がxyz で終わるもの
findstr /R "xyz\>" 検索対象.txt

日本語が検索できない

文字コードがUTF-16(メモ帳ではUnicode)あるいはUTF-8の場合は検索できないようだ。
Shift-JIS(メモ帳ではAnsi)で保存すると検索できるようになる。
UTF-16、UFT-8の場合、英語の検索でも間違った結果が帰る場合がある。(マルチバイトの文字を誤判断)
findstrを使用する場合はShift-JISが無難。

for との組み合わせで応用

c:\temp\検索文字一覧.txtに記載された文字(文字ごとに改行しておく)をそれぞれループして検索。
要するに3行あれば3回ループする。
for /F %%i in (c:\temp\検索文字一覧.txt) do (
findstr /C:%%i /S *.txt
)

その他

findstr /R "[a-z]*" c:\temp\*

だと[a-z]ではない 111などの数字もヒットする。
これは * が 0 個以上の数字だから。

FINDSTR: 開くことができません

他のエディタなどのプロセスが開いていると"開くことができません "で失敗する。もちろんそのファイルが存在しない場合も。

結果をファイルにリダイレクト

・標準出力
findstr aaa 検索対象.txt > stdout.txt
・エラー出力
findstr aaa 検索対象.txt 2> stderr.txt
・両方を異なるファイル
findstr /Z aaa 検索対象.txt > stdout.txt 2> stderr.txt
・両方を同じにファイル
findstr aaa 検索対象.txt > stdout-stderr.txt 2>&1

[Windows 10まとめに戻る]