1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

DOS共通コマンド(find findstr)のバッチ処理マニュアル

2022-02-10 05:51:42

1.4 find findstrコマンドの学習

学習のポイント
1. 文字列の検索: 検索
2.文字列検索の強化:findstr

I. 文字列検索: 検索

ファイル内の文字列を検索する。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string"[[drive:][path]filename[ ...]].

  /V 指定された文字列を含まない行をすべて表示します。
  /C 文字列を含む行の数だけ表示します。
  /N 行番号を表示します。
  /I 文字列を検索する際に大文字と小文字を無視します。
  /OFF[LINE] オフラインの属性セットを持つファイルをスキップしないようにしました。
  "string" 検索する文字列を指定します。
  [ドライブ:][パス]ファイル名 検索するファイルを指定します。


基本書式:find "検索する文字列" 検索するファイル(カレントディレクトリにない場合、フルパスが必要)

例1
find "abc" d:\abc.txt
abc.txtの中でabcという文字列の行を探す。


/I 文字列を検索する際に大文字と小文字を無視します。

例2
find /i "abc" d:\abc.txt
引数 /i は "Ignore" の略で、大文字小文字を無視することを意味します。/I パラメータは、大文字と小文字を区別せずに、文字列 "abc" を検索することができます。


/N 行番号を表示します。

例3
find /n "abc" d:\abc.txt
nパラメータは、英語の "Number" を表します。n パラメータを使用すると、文字列 "abc" が配置されている行番号を見つけることができます。


/C 文字列を含む行番号のみ表示されます。

例4
find /c "abc" d:\abc.txt
cパラメータは、英語の "Count" の省略形です。c パラメータを使用すると、文字列 "abc" を含む行の数を数えることができます。


/V 指定された文字列を含まない行をすべて表示します。

例5
find /v "abc" d:\abc.txt
このパラメータは、ファイル内で指定された文字列を含まない行を検索するために使用されます。この場合、文字列 "abc" を含まない行を検索することを意味します。

注)findコマンドで検索する文字列は、二重引用符 " "で囲む必要があります。

II. 文字列検索の強化:findstr

ファイル内の文字列を検索します。
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:ファイル] となります。
        [C:文字列] [/G:ファイル] [/D:ディレクトリリスト] [/A:色属性] [/OFF[LINE]]です。
        文字列 [[ドライブ:][パス]ファイル名[ ...]]。

  行頭の /B ペアリング・パターン。
  /E 行末のペアパターン。
  /L 検索文字列を単語単位で使用します。
  /R 検索文字列を一般的な表現として使用します。
  /S 現在のディレクトリとすべてのサブディレクトリで検索します。
              一致するファイル
  /I 大文字と小文字を区別せずに検索することを指定します。
  /X 完全に一致する行を出力します。
  /V 一致しない行のみを出力します。
  /N マッチする各行の前の行数を表示します。
  /M ファイルにマッチが含まれる場合、ファイル名のみを表示します。
  /O マッチする各行の前に文字オフセットを印刷します。
  /P 印字不可能な文字を含むファイルを無視します。
  /OFF[LINE] オフラインの属性セットを持つファイルをスキップしません。
  /A:attr 16進数で色属性を指定します。詳細は、quot;color /?を参照してください。
  /F:file 指定されたファイルからファイルのリストを読み込みます(/はコンソールを表します)。
  /C:string 指定された文字列をリテラル検索文字列として使用します。
  /G:file 指定されたファイルから検索文字列を取得します。(/はコンソールを表します)。
  /D:dir セミコロンで区切られたディレクトリのリストを検索します。
  文字列 探す文字列です。
  [ドライブ:][パス]ファイル名 探すファイルを指定します。

引数に /C が付いていない限り、検索文字列の区切りには空白を使用する。
例:'FINDSTR "hello there" x.y' ファイル x.y 内の "hello" を検索する、または
"there"です。  'FINDSTR /C:"hello there" x.y' ファイル x.y で "hello there" を検索してください。


1. 基本書式: findstr " strings " [ドライブ:][パス]ファイル名

文字列は、検索する内容です。
[rive:][path]filenameは探すファイルを指定します。pathは省略可能で、デフォルトではカレントディレクトリになります。

例1
findstr "icq" 123.txt
123.txtから文字列"icq"を含む行を検索します。


/I 大文字と小文字を区別せずに検索することを指定します。

例2
findstr /i "MSN" 123.txt
123.txtの中で、"MSN"という文字を含み、大文字小文字を区別しない行を検索します。


★/R 検索文字列を正規表現として使用します。パラメータ /R は、文字列を正規表現のルールで解釈することを重視します。 r - 右 右が正です。我々は
は右手と言っているのですから、右はプラス、左はマイナスということになります。

例3
findstr /r "icq msn" 123.txt
123.txt の中の "icq" または "msn" を含む行を、複数の文字列をスペースで区切って検索してください。


 /S 現在のディレクトリとすべてのサブディレクトリを検索します。

例4
findstr /s /i "MSN" *.txt
現在のディレクトリとすべてのサブディレクトリにあるすべてのtxtファイルから、文字列 "MSN"を検索します(大文字と小文字は区別されません)。


/C:string 指定された文字列をテキスト検索文字列として使用します。

例5
findstr /c:"icq msn" 123.txt
123.txt で "icq msn" という文字を含む行を探します。ここでは "icq msn" が全体であることに注意してください。
このパラメータは、主にスペースを含む文字列を検索するために使用されます。


★findstr "me you him" test.txt を使用すると、内容が見つかりませんが、スイッチ /i または /r を追加すると、正しく表示されるようになります。
これは、複数の中国語平文文字列を検索した場合のバグと思われ、単一の中国語平文文字列では問題ありません。

2. findstrコマンドで正規表現を使用する際のルール

一般的な表現のクイックリファレンスです。
  .        ワイルドカード:任意の文字
  * 繰り返し:前の文字またはカテゴリが0回以上出現すること
  ^ 行位置:行の先頭
  $ 行位置:行の終わり
  [クラス] 文字クラス:文字セット内の任意の文字
  [class] 補完文字クラス:文字集合に含まれない任意の文字
  [x-y] 範囲:指定された範囲内の任意の文字
  \x Escape: メタ文字xのリテラル使用法
  \<xyz 単語位置:単語の先頭
  xyz> 単語の位置: 語末


ワイルドカードと繰り返しのルール(.や*など)。
ワイルドカード、すなわちピリオドは、文字、数字、セミコロン、スペースを含む任意の文字、および1つだけを表します。
繰り返し文字、またはタイプ*は、直前の文字の出現回数を表します(0から複数回まで、0はなしを意味します)。

findstr . 123.txt または findstr ". " 123.txt
ファイル123.txtから空白行を除く任意の文字を検索します。

例6
findstr . * 2.txt または findstr ". *" 2.txt
ファイル123.txtから空白行を含む任意の文字を検索します。

例7
findstr ac* 123.txt
ファイル 123.txt の中の文字列 "a" と、a の後に 0 または任意の数の c が出現している行を検索します。
例えば
a
エーシー
acc
アドック
などはすべて一致します。

例8
findstr ak5* 123.txt
123.txtというファイルの中で、"ak"という文字列と、akの後に0回または任意の5回出てくる行を探します。例えば
アク
ak5
akbbb
ak125
ak555
などはすべて一致します。


行頭と行末の文字規則、すなわち^と$です。

例9
findstr "^step" 123.txt
ファイル123.txtの中で、stepという文字列が行頭にある行を検索します。
例えば
ステップドカ
ステップ456
この2行はどちらも一致します。

例 10
findstr "step$" 123.txt
ファイル123.txtのうち、stepという文字列が行末にある行を検索する。
例えば
123 dstep
123ステップ
この2行も一致します。

例11
findstr "^step$" 123.txt
ファイル123.txtの中で、行頭がstepで行末もstep、つまりstepが別行動になっている行を探します。


● 文字集合の規則、すなわち[クラス]。
は、その集合に含まれる文字のいずれかを含む電子的一致を示します。
この文字セットの要素は、文字と数字、および:}{ ,.]のような一般的な半角文字が使用できます。[ などですが、ダブルクォート "は認識されません。また、漢字は不可。中国語の文字
は正しく解釈されません(漢字はASCIIではありません)。
文字セット内にワイルドカードや重複が挿入されている場合、すなわち "[. *]" は、.や*を通常の文字として扱い、ワイルドカードや繰り返しの意味を持たせなくなります。

例 12
findstr "[0-9]" 123.txt
ファイル123.txtから、0〜9のいずれかの数字を含む行を検索します。
例えば
4kkb
1 lkka cc
この2つの行はどちらも一致します。

例13
findstr "[a-zA-Z]" 123.txt
123.txtをアルファベットの行を含めて検索します。

例 14
findstr "[abcezy]" 2.txt
123.txtというファイルから、a b c e z y のいずれかの文字が含まれる行を探す。

例15
findstr "[a-fl-z]" 2.txt
ファイル 123.txt から、a から f、l から z のいずれかの小文字を含み、g h I j k の文字を含まない行を検索します。

例16
findstr "M[abc][123]Y" 2.txt
ファイル 123.txt で Ma1Y , Mb1Y, Mc1Y; Ma2Y , Mb2Y, Mc2Y; Ma3Y , Mb3Y, Mc3Y にマッチする行を検索する。


引き算のルール、すなわち[^class]です。

例 17
findstr "[^0-9]" 123.txt
その行が純粋に数字だけの場合は、フィルタリングされます。例えば、2323423423のような文字列はフィルタリングされますが、345hh888のような形式はフィルタリングされません。
純粋に数字だけの行には、行頭にも行末にもスペースを入れてはいけないことに注意してください。

例18
findstr "[^a-z]" 123.txt
もしそれが純粋にアルファベットの行であれば、それをフィルタリングします。例えば、sdlfjlkjlksjdklfjlskdf そのような文字はフィルタリングされ、もしそれがsdfksjdkf9999 そのような形状であれば、それはフィルタリングされます。
純粋なアルファベットの行には、行頭にも行末にもスペースを入れてはいけないことに注意してください。

例 19
findstr "[^add]" 123.txt
a d d の3文字からなる純粋なアルファベット文字列のみを含む行をフィルタリングする。
例えば
a
広告
ダダッ
dd
これらの行はフィルタリングされます。
a d d からなる純粋なアルファベット文字列のみを含む行には,行頭にも行末にもスペースを入れることができないことに注意してください。
フィルタリングに失敗しました

例 20
findstr "[^echo]" 123.txt
e c h o の4文字からなる純粋なアルファベット文字列のみを含む行をフィルタリングします。
例えば
e
c
エック
チョ
チョー
これらの行はフィルタリングされます。


単語の接頭辞と接尾辞の位置関係ルール(例: \<xyz と xyz>

xyzには英単語や数字が入りますが、漢字には適用されません。記号は、小なり・大なりの記号に対するリダイレクトコマンドの意味を解消するエスケープ文字として理解されます。
このルールは、1つの英単語に似たマッチングです。

例21
Findstr "Ⅻ<echo"123.txt。
先頭にechoが付く文字列を含むすべての行がマッチします。
例えば
echo:kkk a add
jjkkエコー
両行とも一致します。
(考える:なぜ :echo もマッチするのか?)

例 22
findstr "echo>" 123.txt
接尾辞にechoを持つ文字列を含むすべての行が一致する。
例えば
qq bbecho この行もマッチします。
(考える:なぜkkk echo: もマッチするのか?)

例 23
findstr "\<end>123.txt
ここでは、正確な単語を検索するために使用します。その単語の末尾の行を探します。
注意事項
終了
cdkend
bcd-end-jjkk
どの単語も一致しない。
(考える:なぜend echoとend alsoが一致するのか?\<xyz> のフォーマットは1つの英単語を探しているからです)


エスケープ文字
式中の特殊文字(メタキャラクタ)を一般的な文字に変換する。一般的には、次のように記述する。
\.
\*
\\\
\[
\]?
\-

例24
findstr "\.abc" 123.txt
ファイル123.txtから、文字列".abc"に一致する行を探します。ここで、 \.はエスケープされています。

例25
findstr "1}} 123.txt or findstr "1}} 123.txt
ファイル123.txtから、文字列"1にマッチする行を検索します(但し、˶‾‾‾‾˵)。

探している文字列の中に、"★"が含まれている場合は、"★"を"★"でエスケープするか、"★"を"★"に変えてください。 \\\\ . 対象となる文字列の中に \ の後に内容がある場合は、次の文字を検索してください。
文字列 \ は、(それ自体がエスケープ要件) になることに加えて、(それ以外の) 別の文字が続くことができる。