Windowsコマンドプロンプト「find」コマンド:全オプション解説と使い方の具体例

Windowsコマンドプロンプト「find」コマンド:全オプション解説と使い方の具体例は「findは1つのliteral文字列を行単位で探す小さなcommandです。/I、/V、/C、/Nを目的に合わせて使い、正規表現や複数条件、directory再帰が必要ならfindstrまたはPowerShellのSelect-Stringへ切り替えます。」と理解すると迷いません。cmd.exeの組み込み構文と外部commandのfind.exeを区別し、PowerShellではfindが別の解釈になり得る点が適用条件です。

日程Fit。無料・登録不要。「いつ空いてる?」を、ひとつのリンクで。リンクを送って、○△×でかんたん日程調整。無料で日程を作る。
目次

find.exeの実体と入力encodingを確認する

findの判定は0=一致、1=一致なしを基本にします。一方、missing fileや読取り不能はOS build・入力形態によって同じstatusになるとは限らないため、ERRORLEVELだけで分類せず、実行前のpath存在、stderrの有無、対象fileを開けたかを併記します。status 2などは無効switchや構文errorの手掛かりとして扱い、実機fixtureで確定します。引用符を含む検索語と入力ファイルを小さなサンプルで試し、通常検索、行番号表示、件数表示の出力を確認してから、バッチ処理で各終了コードを分岐させます。

  • where findで実行実体がSystem32のfind.exeか確認する
  • find /?でその端末のsyntaxとoptionを表示する
  • typeで対象fileの一部を確認し、encodingと改行を把握する
  • pathと検索文字列を二重引用符で囲み、command promptで試す

検索文字列をquoteしてliteralに渡す

以下のcodeはPATHでGNU findなどを拾わないよう%SystemRoot%\System32\find.exeを明示します。where find.exeがSystem32だけを返す管理済み端末では短いfindも同じ実体です。findでは0を一致、1を一致なしとして扱うのが基本です。ただしmissing fileや読取り不能が常に特定の値になるとは仮定せず、表示が空ならERRORLEVEL、stderr、path存在を同じ記録で確認します。status 2などは無効switchや構文errorを疑い、検索不一致と分離します。wildcardで複数fileを渡す場合は見出し表示も結果に混ざり得ます。findは正規表現engineではないため、ORやword境界を文字列の組合せで無理に表現しません。

/I・/N・/C・/V・/OFFLINEを用途別に選ぶ

  • PowerShellでcmd用の引用符やerrorlevelをそのまま使う
  • 検索文字列の引用符を省く
  • /Cを出現回数と誤解する
  • binaryやUTF-16fileを想定せず検索する
  • findとfindstrのoptionを混同する

file入力とpipe入力の違いを押さえる

基本のliteral検索

%SystemRoot%\System32\find.exe "ERROR" "C:\Logs\app.log"

検索文字列の二重引用符はsyntax上必要です。findは既定で大文字小文字を区別し、行に指定文字列が含まれればその行を出力します。

大文字小文字を無視して行番号を付ける

%SystemRoot%\System32\find.exe /I /N "failed" "C:\Logs\app.log"

/Iはcase-insensitive、/Nは行番号を表示します。日本語やUnicodeのcase処理は期待と異なる場合があるため、実データで確認します。

一致行数だけを数える

%SystemRoot%\System32\find.exe /C "SUCCESS" "C:\Logs\app.log"

/Cは一致した行の数であり、一行内に同じ文字列が複数回あっても複数回とは数えません。event件数と同義にする前にlog形式を確認します。

pipe入力を絞り込む

tasklist | %SystemRoot%\System32\find.exe /I "notepad.exe"

左側commandの標準出力をfindが読みます。tasklistが失敗してもfindの結果だけでは原因が分からないため、自動化では両commandの終了状態とstderrを別に記録します。

一致しない行を表示

%SystemRoot%\System32\find.exe /V "DEBUG" "C:\Logs\app.log"

/Vは指定文字列を含まない行を表示します。除外後のlogを正本へ上書きせず、共有用copyへ出力して必要行が落ちていないか確認します。

ERRORLEVEL・path存在・stderrを三列で残す

findは読み取りですが、結果を同じ入力fileへredirectするとshellが先にfileを切り詰めます。出力は別のtimestamp付きfileへ保存し、元fileのsizeとhashを保持します。logにaccount名、path、token等が含まれる場合、画面共有やticket添付の前に承認済みcopyをmaskします。除外filterを使った結果だけを監査証跡にせず、元logの保持期限を守ります。

原本を変えないfixtureでoptionを試す

既知の一致行と不一致行を持つ小さなsampleを用意し、/I、/V、/C、/Nを一つずつ確認します。本番logではtypeやGet-Content -TotalCountで先頭を読み、encodingが適切に表示されることを確認します。自動処理へ組み込む場合は一致0件を正常とする場面とalertにする場面を仕様化します。

一致・不一致・読取失敗を再現して検収する

findの公式optionは/V、/C、/N、/I、/OFF[LINE]です。資料上の/OFF[LINE]は角括弧内が省略可能という表記で、実際のコマンドでは/OFFまたは/OFFLINEを入力します。どちらもoffline属性のfileを処理対象に含め、既定ではskipされ得る対象を明示的に読みます。一致あり0、一致なし1を基本の判定にします。missing fileや読取り不能はstatusだけで一致なしと区別できない環境があるため、path存在とstderrを別列で保存します。status 2などは無効switch・構文errorの候補として扱い、表示なしを一種類にまとめません。

find.exeのoptionを一つずつfixtureへ適用する

%SystemRoot%\System32\find.exe /OFFLINE /I /N "ERROR" "C:\Archive\app.log"
echo find_status=%ERRORLEVEL%

match・no match・実行不能を区別する

  • 文字列を検出:literal文字列が見つかり、/Nなら行番号、/Cならfile別件数を伴ってstatus 0になる
  • 一致行なし:検索文字列が無い場合はstatus 1で、error messageのない正常な0件として扱える
  • missing・unreadable・syntax error:missing fileや読取り不能はstderrと事前のpath存在で分離し、status 2などは無効switch・構文errorの手掛かりとして扱う

findは正規表現検索ではなくliteral検索です。複雑なpatternはfindstrまたはPowerShellを使い、pipeではproducerとfindの終了codeが別である点を記録します。/OFF[LINE]はoffline fileのrecallやI/Oを招き得るため、対象storageの運用を確認します。

大文字小文字とoffline属性を境界にする

(>sample.txt echo Alpha)&(>>sample.txt echo beta)
%SystemRoot%\System32\find.exe /I "BETA" sample.txt >nul
echo match_status=%ERRORLEVEL%
%SystemRoot%\System32\find.exe "missing" sample.txt >nul
echo no_match_status=%ERRORLEVEL%
if exist missing-file.txt (echo missing_path_exists=1) else (echo missing_path_exists=0)
%SystemRoot%\System32\find.exe "x" missing-file.txt >nul 2>missing-file.err
set "missing_status=%ERRORLEVEL%"
if exist missing-file.err type missing-file.err
echo missing_file_status=%missing_status%
%SystemRoot%\System32\find.exe /Z "x" sample.txt >nul 2>invalid-switch.err
set "invalid_status=%ERRORLEVEL%"
if exist invalid-switch.err type invalid-switch.err
echo invalid_switch_status=%invalid_status%

一致あり・なし、大小文字、空file、offline属性、存在しないfile、無効switchを実行し、stdout、stderr、path存在、ERRORLEVELを同じ表へ保存します。/Cと/Nの併用時表示も対象OSで確認します。

batchでは0=一致、1=一致なしを基本にしつつ、missing fileや読取り不能をstatusだけで断定しません。stderrとpath存在を併記し、status 2などは無効switch・構文errorの候補として扱います。tasklistなどのpipeでも直後にERRORLEVELを保存し、後続echoやtypeの成功で上書きしないようにします。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次