[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

findstr【コマンド】

pointこの用語のポイント

pointWindowsで使えるコマンドだよ

pointファイルの中にある文字列を検索するよ

スポンサーリンク

簡単に書くよ

findstr【コマンド】とは

ファイルの中にある文字列を検索するときに使うコマンド
です。

image piyo

詳しく書くよ

「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」オプションですが、これは指定された文字列を一つの文字列として検索するためのオプションです。

例えば

findstr /C:"ab 123" hoge.txt

を実行しても「hoge.txt」には検索に一致する行が存在しません。
これは文字列「ab 123」を探すためです。

先程も書きましたが「/C」オプションを付けないで

findstr "ab 123" hoge.txt

を実行すると「ab」もしくは「123」を含む行を探してくれます。
「/C」オプションは「いやいや、それだと困る。半角スペースも一つの文字として探したいんだ」なときに使うオプションなのです。
例えば文字列「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
あい
あいう
あいうあいう

いう
いうえ


今度は「い」を含む行が結果に含まれましたね。

今のところ把握しているのは日本語の「あ」を含む文字列を検索すると結果がおかしくなる「場合がある」ですが、他にもあると思います。
日本語を含む文字列を検索するときは気を付けてくださいね。
思わぬ不具合が出るかもしれません。

ドッキドキですね。

image piyo2

一言でまとめるよ

まぁ「findstr」ってコマンドが出てきたら「ファイルの中にある文字列を探すときに使うんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク