Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【コマンドプロンプト】findstrで除外(/v)と正規表現(/r)を組み合わせて高度なログ抽出を行う方法

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

Windowsのコマンドプロンプトで文字列を検索・抽出する際、欠かせないのが findstr コマンドです。

単一のキーワードを検索するだけでなく、「特定の文字を除外しつつ(/V)」「正規表現を使い(/R)」「さらに今日のシステム日付の行だけを絞り込む」といった複雑な条件も、コマンドをパイプ(|)で数珠繋ぎにすることで1行でスマートに実現できます。

今回は、実務のログ解析バッチなどでそのまま使い回せる、強力な組み合わせ技を具体的なコマンド例とともに解説します!

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

💡 結論:この1行で一発解決!

今回の「3つの条件(特定の文字列を除外 ➔ 今日の日付のみ抽出 ➔ 特定の正規表現パターンをさらに除外)」を満たし、最終的に hoge.txt へ出力するコマンドがこちらです。

DOS

findstr /v "除外文字列1" ファイル名 | findstr %DATE:/=% | findstr /v /r "ABC.*Z" > c:\work\hoge.txt

このコマンドが内部でどのように動いているのか、3つのステージに分解して詳しく解説します。

🔍 コマンドの徹底解説

① findstr /v "除外文字列1" ファイル名

  • /V オプション: 指定した文字列を「含まない行(不一致の行)」だけを抽出(除外)します。

  • ここでまず、ファイルから「除外文字列1」が入っている邪魔な行をすべて削ぎ落とします。

② | findstr %DATE:/=%

  • |(パイプ): 左側のコマンドが出力した結果を、そのまま右側のコマンドの入力として引き渡します。

  • %DATE:/=% Windowsの環境変数 %DATE%(例:2026/06/26)から、スラッシュ(/)をすべて削除して空文字に置換するテクニックです。これにより、自動的に「今日のYYYYMMDD(例:20260626)」という8桁の数字に変換されます。

  • ステージ①で絞り込まれたデータから、さらに「今日の日付の行」だけを抽出します。

③ | findstr /v /r "ABC.*Z" > c:\work\hoge.txt

  • /R オプション: 検索に正規表現を使用することを明示します。

  • "ABC.*Z"ABC で始まり、間に任意の文字が1文字以上繰り返され、最後が Z で終わる」という正規表現パターンです。

  • /V/R の組み合わせ: これにより、「この正規表現パターンにマッチする行を除外する」という高度なフィルタリングが可能になります。

  • 最後に >(リダイレクト)を使い、すべての条件をクリアした綺麗なデータだけを c:\work\hoge.txt に書き出します。

⚠️ 差がつくポイント:1文字以上の繰り返しは * ではなく .*

正規表現に慣れていない方が最も陥りやすい罠が、「任意の文字の繰り返し」に *(アスタリスク)を単体で使ってしまうことです。

  • ❌ 間違い:ABC*Z これだと、「AB」の後に「Cが0文字以上繰り返されてZが続く(例:ABZABCZABCCCZ)」という意味になってしまい、意図した検索になりません。

  • ⭕ 正解:ABC.*Z 正規表現において、.(ドット)は「任意の1文字」を表し、*(アスタリスク)は「直前の文字の0回以上の繰り返し」を表します。そのため、2つを組み合わせた .* にすることで初めて、「間にどんな文字が何文字入っていてもOK」というワイルドカードの役割を果たしてくれます。

📝 まとめ

findstr コマンドは単体だとシンプルですが、以下のように役割を分けてパイプで繋ぐことで、まるで専用のスクリプトを組んだかのような高度なテキスト処理が可能になります。

  1. findstr /v で不要な行を捨てる

  2. %DATE:/=% で今日の日付(YYYYMMDD)にロックする

  3. findstr /v /r ".*" で、正規表現を使った高度な除外を行う

サーバーの巡回監視バッチや、毎日のエラーログ抽出の自動化にとても役立つテンプレートですので、ぜひ正規表現の .* の意味と合わせてマスターしておいてくださいね!

タイトルとURLをコピーしました