コマンド別解説

findstr(ファイル内の指定文字列を検索)

>>findstrのオプション簡易解説へ

目次

 

「findstr」コマンドの使い方

「findstr」コマンドは指定した文字列をファイル内容から検索するコマンドです。「find」コマンドの強化版であり、指定できるオプションが増え、検索のバリエーションが増しています。「find」コマンドでは事足りない場合に「findstr」コマンドを利用するのがよいでしょう。

使い方は、

となります。これは、「find」コマンドと変わりません。

例えば、「file.txt」ファイルが以下のような内容だとします。

【file.txt】
findstr(ファイル内の指定文字列の検索) 検索対象ファイル(その1)

このファイルに対して、「朝」という文字列を指定して「findstr」コマンドを実行する場合は、

とします。

実行結果は以下のようになります。

findstr(ファイル内の指定文字列の検索) findstrコマンドの使い方

このように、「朝」という指定した文字列を含む行が表示されています。

 

指定した文字列の行番号も表示する

「/n」オプションを使うと、行番号を添えた表示が可能です。※「find」コマンドでも同様の指定が可能です。

findstr(ファイル内の指定文字列の検索) /nオプションで行番号を表示

指定文字列を含んだ行の出力の左に、[数字]としてその行数が表示されています。

 

指定した文字列を含まない行を表示する

今度は反対に指定した文字列を含まない行について表示させたい場合ですそのときは「/v」オプションを指定します。※「find」コマンドでも同様の指定が可能です。

以下、実行例です。

findstr(ファイル内の指定文字列の検索) 指定した文字列がない行を表示する

文字列「朝」を含んでない行のみが表示されていることが分かります。

「/v」オプションは他のオプションと併用することも可能で、行番号を表示する「/n」を同時に指定すると、

もしくは、

とすれば、

findstr(ファイル内の指定文字列の検索) /nと/vオプションの併用

のような出力となります。文字列「朝」を含んでない行が表示され、その行番号も表示されています。

 

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

「find」コマンドと同様、「findstr」コマンドで文字列を検索する場合には、大文字と小文字は別の文字列として扱われます。例えば、「file.txt」ファイルに対して「ide」を検索しても、どの行も検索に引っかからず何も表示されません。

大文字と小文字は同一文字列として扱いたい場合は、「/i」オプションを指定します。※「find」コマンドでも同様のオプション指定が可能です。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 大文字と小文字を区別せずに検索

このように、文字列「ide」で検索すると、最後の行の「IDE」が同一文字列と扱われ、検索に引っかかるようになりました。

 

ワイルドカードを使った文字列の検索

ここからが、「find」コマンドではできなかった機能となります。

まずは、ワイルドカードを使った文字列の検索です。「/r」オプションを指定することで、指定する検索文字列にワイルドカードが使用可能になります。

以下は、ワイルドカード「*」を使って文字列を検索している例ですが、通常の「*」の使い方ではないので、注意が必要です。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) ワイルドカードを使った検索文字列の指定

「findstr」コマンドでのワイルドカード「*」は「この記号の左に書かれた文字の繰り返し」を表します。

つまり、上記の例では「writ*en」を検索文字列に指定していますが、「*」は左の「t」の繰り返しの意であり、このコマンドは「written」、「writtten」、「writttten」…を検索していることになります。

 

任意の文字列を検索したい場合は、「.」を使います

「.」は任意の一文字として扱われるため、「writ.en」とすれば、「.」の部分はどんな一文字が入ってもよいということになります。

以下、上記のコマンドを実行した結果です。

findstr(ファイル内の指定文字列の検索) ドットを使った検索文字列の指定

 

1文字以上の任意文字列を検索する場合は、「.*」を使用します。

「.」が任意の一文字を表すので、左の文字の繰り返しを表す「*」を併用し、「.*」とすれば1文字以上の任意文字列を表現できるというわけです。

以下、上記のコマンドを実行した結果です。

findstr(ファイル内の指定文字列の検索) ドットとワイルドカードを使った任意の文字列を検索

したがって、この例では、「w」で始まり「n」で終わる文字列を検索していることになります。その間の文字や文字数はどんなものでも構いません。

 

先頭・末尾が指定文字列と一致する行を検索

「/b」オプションを付けると、指定した検索文字列が行の先頭から始まっている場合のみを対象とすることができます。

以下の例は、「file.txt」ファイルに対して、「朝」から始まっている行を検索して表示するコマンドです。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 指定文字列が先頭から始まっている行を検索(その1)

「file.txt」ファイルの内容には、4行目と7行目にも「朝」という文字列が使われています。以下に、「file.txt」ファイルをもう一度示します。

【file.txt】
findstr(ファイル内の指定文字列の検索) 検索対象ファイル(その1)

しかし、「/b」オプションを付けたため、「朝」で始まる行のみが対象となったため検索結果には表示されません。

同じ機能を「/r」オプションを使って書くこともできます。以下のコマンドは上記の「/b」オプションを指定したコマンドと全く同じ働きをします。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 指定文字列が先頭から始まっている行を検索(その2)

ここで、文字列「朝」の前に付いている「^」は「行の始め」という意味です。

「/r」オプションを使用することにより、ワイルドカード以外にも特殊な意味を持つ記号を使えるようになります。そのため、特殊記号をそのまま検索文字として使用するには注意が必要であり、特殊文字の使用には後述する「/l」オプションを使用します。

 

文字列を指定で終わっている行を検索するには「/e」オプションを用います。以下の例は、「IDE」で終わっている行を検索して表示するコマンドです。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 指定文字列で終わっている行を検索(その1)

これも、同じ機能を「/r」オプションを使って書くことができます。以下のコマンドは上記のコマンドと全く同じ働きをします。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 指定文字列が末尾で終わっている行を検索(その2)

 

複数の検索文字列を指定する

「findstr」コマンドでは、複数の検索文字列を指定することができますその場合、検索文字列をスペース区切りで指定します。

以下の例は、「朝」もしくは「IDE」の複数の文字列を同時に検索している例です。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 複数の文字列を検索

 

複数の文字列を対象として検索する別の方法として、検索文字列の一覧を書いたファイルから文字列を読み込み検索する方法もあります。まず、以下のような「word.list」ファイル(ファイル名は何でもかまいません)を用意します。

findstr(ファイル内の指定文字列の検索) 検索文字列一覧ファイル

中には検索したい文字列を記入します。そして、実行時に「/g」オプションを用いて、このファイルを指定します。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 検索文字列一覧ファイルを用いた検索

 

複数のファイルを検索対象とする

「/f」オプションを用いて、複数のファイルを検索対象とすることができます。

まずは、検索対象としたいファイル名を一つのファイルにまとめます。ここでは、以下のような「file.list」ファイルリスト(ファイル名は何でもかまいません)を使用します。

別のフォルダ内にあるファイルも指定可能です。ここでは、「file.txt」と「temp\file2.txt」を指定しており、ファイル内容はそれぞれ、

【file.txt】
findstr(ファイル内の指定文字列の検索) 検索対象ファイル(その1)

【temp\file2.txt】
findstr(ファイル内の指定文字列の検索) 検索対象ファイル(その2)

です。

実行時に「/f」オプションの右側に「:」を挟んでファイルリストを指定します。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) ファイルリストを指定した複数ファイル内の文字列の検索

ファイルリストで指定した二つのファイルから文字列「朝」が検索されていることが分かります。

 

フォルダ内の複数ファイルを検索対象とする

「/d」オプションを使用して、フォルダ内の複数ファイルを検索対象とすることができます。

例えば、「temp」フォルダの下に「file.txt」ファイルと「file2.txt」ファイルが入っていたとします。ファイルの内容は前回と同じものです。

とすれば、「temp」フォルダ内の全てのtxtファイルを検索対象とすることができます。コマンドの最後は「*.txt」として、検索するファイルをワイルドカードを使って指定していることに注意して下さい。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) フォルダ内の複数のファイルを検索対象とする

「/d」オプションと「;」を併用すれば、検索対象とするファイルを複数指定することもできます。検索したいフォルダを「;」で区切って複数指定します。

以下の例は、「temp」フォルダと「temp2」フォルダの二つのフォルダを検索対象としています。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 複数のフォルダ内のファイルを検索対象とする

 

完全に一致する行のみを表示する

ここまでは、一部に指定した文字列が含まれている行を検索してきましたが、ときには行全てが完全に一致した場合だけを見つけたいときもあります。そのときは、「/x」オプションを使用します。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 完全に一致した行を検索する

 

スペースや「*」、その他特殊文字を検索文字列に使う

スペースや*、その他特殊文字を検索文字列に使うには「/l」オプションを使用します。

例えば、スペースを含んだ「by IDE」という文字列を検索したいとき、

とします。以下、実行結果です。

findstr(ファイル内の指定文字列の検索) スペースを含んだ文字列を検索する

注意すべきは、「/l」を含まないと「複数の検索文字列を指定する」で述べたように、「by」と「IDE」を別々の文字列としてどちらかを含んだ行を探してしまうということです。スペースを文字列の一部として扱う場合は必ず「/l」が必要です。

その他にも、「/l」を指定することにより、「*」などの特殊文字をそのまま文字として検索することができます。以下、特殊文字の検索コマンド例です。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 特殊文字列を含んだ文字列を検索する

 

「/c:”[文字列]”」オプションを指定することでも、特殊文字を検索文字としてそのまま使うことができるようになります。

以下、実行結果です。

findstr(ファイル内の指定文字列の検索) 特殊文字列を含んだ文字列を検索する(その2)

 

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す