findstr【コマンド】
コマンドだよ
Windowsで使えるよ
ファイルの中にある文字列を検索するよ
スポンサーリンク
簡単に書くよ
findstr【コマンド】とは
コンピュータさんに対する命令文(コマンド)のひとつ
であり
ファイルの中にある文字列を検索するときに使うコマンド
です。
詳しく書くよ
「findstr」コマンドは
ファイルの中にある文字列を検索するときに使うコマンド
です。
Windows系で使えます。
書き方は
findstr [オプション] [探す文字列] [探す対象のファイル名]
です。
オプションは、あれやこれやとあります。
| オプション | 説明 |
|---|---|
| /B | [探す文字列]で始まる行を探す。正規表現の「^[探す文字列]」と同じ |
| /E | [探す文字列]で終わる行を探す。正規表現の「[探す文字列]$」と同じ |
| /L | [探す文字列]を普通の文字列(正規表現ではない)として扱う |
| /R | [探す文字列]を正規表現として扱う |
| /S | サブフォルダの中も探す |
| /I | 大文字・小文字を区別しない |
| /X | [探す文字列]と完全に一致する行のみ表示する |
| /V | [探す文字列]を「含まない」行のみ表示する |
| /N | 行番号も表示する |
| /M | [探す文字列]を含むファイル名のみ表示する |
| /O | オフセット([探す文字列]のある場所)も表示する |
| /P | 印刷できない文字があるファイルをシカトする |
| /OFF | オフライン属性のファイルも対象にする |
| /OFFLINE | オフライン属性のファイルも対象にする |
| /A:【色属性】 | 2桁の16進数で色属性を指定します……らしいですが、何が起こるのか分かりません。ごめんなさい |
| /F:【ファイル名】 | 【ファイル名】のファイルに書かれている内容を[探す対象のファイル名]とする |
| /C:【文字列】 | 【文字列】を[探す文字列]として使う |
| /G:【ファイル名】 | 【ファイル名】のファイルに書かれている内容を[探す文字列]とする |
| /D:【フォルダ】 | 【フォルダ】内のファイルから探す |
です。
複数のオプションを組み合わせて指定できます。
またfindstrでは正規表現が使えます。
検索する文字列は正規表現を使うことで、あいまいな感じで指定できるのです。
findstrで使える正規表現は
| 正規表現 | 説明 |
|---|---|
| . | 任意の1文字 |
| 【文字】* | 【文字】の0回以上の繰り返し |
| ^【文字】 | 【文字】で始まる |
| 【文字】$ | 【文字】で終わる |
| [【文字列】] | 【文字列】の中のどれか1文字を含む。[abc]と指定した場合はaかbかcを含む |
| [^【文字列】] | 【文字列】の中のどの文字も含まない。[^abc]と指定した場合はaもbもcも含まない |
| [【文字1】-【文字2】] | 【文字1】から【文字2】の間のいずれかの文字を含む。[a-c]と指定した場合はaかbかcを含む |
| \【文字】 | 【文字】を特別な文字として扱わない。「\*」と指定した場合は正規表現の「0文字以上の繰り返し」ではなく「*(アスタリスク)」として扱う |
| \<【文字】 | 単語が【文字】で始まる |
| 【文字】\> | 単語が【文字】で終わる |
です。
findstrの実際の使い方を、例を挙げて見ていきましょう。
前提として、以下の内容のテキストファイル「hoge.txt」があったとします。
1
12
123
123123
a
ab
abc
abcabc
b
bc
bcd
あ
あい
あいう
あいうあいう
い
いう
いうえ
この状態で
findstr "ab" hoge.txt
を実行すると、以下のような結果になります。
ab
abc
abcabc
「hoge.txt」の中から文字列「ab」を含む行だけ表示されましたね。
また複数の文字列を半角スペースで区切って
findstr "ab 123" hoge.txt
を実行すると、以下のような結果になります。
123
123123
ab
abc
abcabc
今度は「hoge.txt」の中から文字列「ab」もしくは「123」を含む行だけ表示されました。
複数の文字列を半角スペースで区切って指定するとOR検索になるのです。
これがfindstrの一番単純な使い方です。
次に、よく使うオプションと補足が必要そうなオプションを見ていきましょう。
まず「/B」オプションですが、これは指定した文字列で始まる行を探すオプションです。
例えば
findstr /B "bc" hoge.txt
を実行すると、以下のような結果になります。
bc
bcd
「bc」で始まる行のみ表示されましたね。
「bc」が含まれる行は他に「abc」などがありますが「abc」は「bc」で始まっていないので表示されません。
これは探す文字列を正規表現として扱うオプション「/R」を指定して
findstr /R "^bc" hoge.txt
を実行したときと同じ結果です。
これが「/B」オプションの動きになります。
次に「/E」オプションですが、これは指定した文字列で終わる行を探すオプションです。
例えば
findstr /E "bc" hoge.txt
を実行すると、以下のような結果になります。
abc
abcabc
bc
「bc」で終わる行のみ表示されましたね。
「bc」が含まれる行は他に「bcd」などがありますが「bcd」は「bc」で終わっていないので表示されません。
これは探す文字列を正規表現として扱うオプション「/R」を指定して
findstr /R "bc$" hoge.txt
を実行したときと同じ結果です。
これが「/E」オプションの動きになります。
「/L」は[探す文字列]をただの文字列、「/R」は[探す文字列]を正規表現として扱うだけなのでいいですよね。
「/S」はサブフォルダの中も処理対象にするってだけです。
「/I」は大文字小文字を区別しないだけです。「abc」「Abc」「ABC」いずれも同じ文字列として扱われます。
「/X」「/V」「/P」は探し方を指定しているだけなので実際に一度使えば分かると思います。
「/N」「/M」「/O」は付加情報も表示するオプションです。表示内容が変わるだけ。
「/OFF」「/OFFLINE」は「オフライン属性」のファイルも対象にします。
「オフライン属性」についてはここでは解説しません。興味がある方は、用語「オフライン属性」の説明を ご覧ください……って、まだ書いていないですけどね。
「/A」は色指定っぽいですが、使い方がよく分かりません。ごめんなさい。
「/F」は……補足しておきましょうか。
「/F」オプションは、検索対象のファイルをファイルから取得するオプションです。
例えば、以下の内容のテキストファイル「target_file_list.txt」があったとします。
hoge.txt
この状態で
findstr /F:target_file_list.txt "ab"
を実行すると、以下のような結果になります。
hoge.txt:ab
hoge.txt:abc
hoge.txt:abcabc
「target_file_list.txt」の中に書いてあるファイル名のファイル、つまり「hoge.txt」を検索対象として文字列「ab」を検索した結果が表示されましたね。
この例では
findstr "ab" hoge.txt
を実行したのと同じ結果なので、あまり意義が感じられませんが、検索対象のファイルが複数あるときには重宝します。
これが「/F」オプションの動きです。
次に「/C」オプションですが、これは指定された文字列を1つの文字列として検索するためのオプションです。
例えば
findstr /C:"ab 123" hoge.txt
を実行しても「hoge.txt」には検索に一致する行が存在しません。
これは文字列「ab 123」を探すためです。
先程も書きましたが「/C」オプションを付けないで
findstr "ab 123" hoge.txt
を実行すると「ab」もしくは「123」を含む行を探してくれます。
「/C」オプションは「いやいや、それだと困る。半角スペースも1つの文字として探したいんだ」なときに使うオプションなのです。
例えば文字列「Program Files」を探したい場合なんかにはこのオプションを使います。
これが「/C」オプションの動きです。
次に「/G」オプションですが、これは検索する文字列をファイルから取得するオプションです。
「/F」オプションの仲間ですね。「/F」は検索対象のファイルをファイルから取得しましたが「/G」は探す文字列をファイルから取得します。
どちらもファイルから内容を取得する点が同じです。
例えば、以下の内容のテキストファイル「target_str_list.txt」があったとします。
ab
123
この状態で
findstr /G:target_str_list.txt hoge.txt
を実行すると、以下のような結果になります。
123
123123
ab
abc
abcabc
「target_str_list.txt」の中に書いてある文字列、つまり「ab」と「123」を検索対象として「hoge.txt」を検索した結果が表示されましたね。
この例では
findstr "ab 123" hoge.txt
を実行したのと同じ結果なので、あまり意義が感じられませんが、探したい文字列がたくさんあるときには重宝します。
これが「/G」オプションの動きです。
最後に「/D」オプションですが、これは探したいファイルのあるフォルダを指定するときに使います。
例えば
findstr /D:C:\test_dir "ab" *.txt
を実行すると「C:\test_dir」フォルダにあるすべてのテキストファイル(ファイル名が「【適当な名前】.txt」のファイル)の中から文字列「ab」を探してくれます。
大量ファイルの中から一気に探したいときに重宝するオプションですね。
これが「/D」オプションの動きです。
findstrコマンドの使い方は、そんな感じです。
あっ、そうそう。
findstrの大きな注意点として、日本語の扱いにバグがあります。
細かいことは調べていませんが、例えば
findstr "123 あ" hoge.txt
を実行すると以下のような結果になります。
123
123123
「あ」を含む行が結果に含まれていませんね。
ところがどっこい
findstr "あ" hoge.txt
を実行すると以下のような結果になります。
あ
あい
あいう
あいうあいう
今度は「あ」を含む行が結果に含まれています。
ちなみに「"123 あ"」の「あ」を「い」に変えて
findstr "123 い" hoge.txt
を実行すると以下のような結果になります。
123
123123
あい
あいう
あいうあいう
い
いう
いうえ
今度は「い」を含む行が結果に含まれましたね。
今のところ把握しているのは日本語の「あ」を含む文字列を検索すると結果がおかしくなる「場合がある」ですが、他にもあると思います。
日本語を含む文字列を検索するときは気を付けてください。
思わぬ不具合が出るかもしれません。
ドッキドキですね。
一言でまとめるよ
まぁ「findstr」ってコマンドが出てきたら「ファイルの中にある文字列を探すときに使うんだな~」と お考えください。
おまけ
■訳してみるよ
「find(ファインド)」の意味は「見つけ出す」とか「探し出す」とかです。
「str」は多分「string(ストリング)」の略です。
「string(ストリング)」の意味は「ひも」とか「糸」とか「弦」とか「一続きの」とか「弦を張る」とか「1列に並べる」とかです。
ただし、今回は「文字列」と解釈してください。
何となく くっつけると
文字列を探し出す
となります。
■「find findstr 違い」で情報をお探しの方へ
findstrは正規表現が使えます。findは正規表現が使えません。その違いです。
■検索してみる?






