find - ファイル内の文字列を検索

にメンテナンス済み

ファイル内やコマンドの出力結果から特定の文字列を検索することは、コマンドプロンプトやバッチファイルで作業を行う際に非常に役立ちます。

この記事では、findコマンドを使って文字列を検索する方法を紹介します。

find コマンドの基本

findコマンドは、ファイル内またはコマンドの出力結果から指定した文字列を検索するためのコマンドです。

検索条件に一致する行を抽出して表示することができます。

コマンドプロンプトでの基本的な使い方

サンプルとして、fruits.txtリンゴという文字が含まれているかを確認してみましょう。

まず、fruits.txtファイルの内容を確認します。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>type fruits.txt
これはフルーツのリストです
リンゴが含まれています
バナナもあります
ここにもリンゴがあります
C:\users\user>

次に、findコマンドで「リンゴ」を含む行だけを抽出します。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find "リンゴ" fruits.txt
---------- FRUITS.TXT
リンゴが含まれています
ここにもリンゴがあります
C:\users\user>

このように、findコマンドを実行すると、fruits.txtファイル内で「リンゴ」を含む行だけが表示されます。

先に使用したtypeコマンドの詳細については、以下のページをご覧ください。

バッチファイルでの基本的な使い方

@echo off
setlocal

find "エラー" log.txt

endlocal
exit

このバッチファイルを実行すると、log.txtファイル内で「エラー」という文字列を含む行が表示されます。

find コマンドの構文

findコマンドの基本的な構文は以下の通りです。

find [/v] [/c] [/n] [/i] [/off[line]] "文字列" [[ドライブ:][パス]ファイル名[...]]

パラメータの説明

パラメータ説明
/v指定した文字列を含まない行をすべて表示します
/c指定した文字列を含む行の数をカウントして合計を表示します
/n各行の前にファイルの行番号を表示します
/i検索時に大文字と小文字を区別しません
/off[line]オフライン属性が設定されたファイルもスキップせずに検索します
"文字列"検索する文字列を指定します(ダブルクォーテーションで囲む必要)
ファイル名検索対象のファイルを指定します
/?コマンドプロンプトでヘルプを表示します
チェック
文字列は必ずダブルクォーテーション(")で囲む必要があります。

find コマンドの使用例

基本的な文字列検索

ファイル内で特定の文字列を検索します。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find "Tokyo" cities.txt
---------- CITIES.TXT
Tokyo is the capital of Japan
C:\users\user>

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

/iオプションを使用すると、大文字と小文字を区別せずに検索できます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find /i "tokyo" cities.txt
---------- CITIES.TXT
Tokyo is the capital of Japan
I visited tokyo last year
C:\users\user>

行番号を表示

/nオプションを使用すると、各行の前に行番号が表示されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find /n "エラー" log.txt
---------- LOG.TXT
[5]エラー: ファイルが見つかりません
[12]警告: エラーが発生しました
C:\users\user>

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

/vオプションを使用すると、指定した文字列を含まない行を表示します。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find /v "成功" result.txt
---------- RESULT.TXT
エラー: 処理に失敗しました
警告: タイムアウトが発生しました
C:\users\user>

一致する行数をカウント

/cオプションを使用すると、指定した文字列を含む行の数をカウントします。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find /c "警告" log.txt
---------- LOG.TXT: 3
C:\users\user>

複数ファイルの検索

複数のファイルを一度に検索することができます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find "config" file1.txt file2.txt file3.txt
---------- FILE1.TXT
config=enabled
---------- FILE2.TXT
config_version=2.0
C:\users\user>

ワイルドカードを使ったファイル検索

ワイルドカードを使用して複数のファイルを検索できます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find /i "ERROR" *.log

パイプとの組み合わせ

findコマンドは、他のコマンドの出力結果をパイプ(|)を使って検索することができます。

dir コマンドの結果を検索

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>dir | find "txt"
2025/10/03 10:30 1,234 readme.txt
2025/10/03 11:15 5,678 notes.txt
C:\users\user>

tasklist コマンドの結果を検索

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>tasklist | find "chrome"
chrome.exe 12345 Console 1 123,456 K
C:\users\user>

実行中のサービスを検索

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>sc query | find "RUNNING"
STATE : 4 RUNNING
C:\users\user>

バッチファイルでの実践的な使用例

ログファイルからエラーを抽出

@echo off
setlocal

echo ========================================
echo ログファイルからエラーを検索します
echo ========================================
echo.

find /n "エラー" application.log

if errorlevel 1 (
    echo エラーは見つかりませんでした
) else (
    echo エラーが検出されました
)

endlocal
exit

設定ファイルの特定の項目をチェック

@echo off
setlocal

echo データベース接続設定を確認しています...

find "database.url" config.properties > nul
if errorlevel 1 (
    echo エラー: データベース設定が見つかりません
    exit /b 1
) else (
    echo データベース設定が見つかりました
    find "database.url" config.properties
)

endlocal
exit

複数ログファイルから特定の日付のエントリを検索

@echo off
setlocal

set SEARCH_DATE=2025-10-03

echo %SEARCH_DATE% のログエントリを検索中...
echo.

for %%f in (*.log) do (
    echo [%%f を検索中]
    find "%SEARCH_DATE%" "%%f"
    echo.
)

endlocal
exit

サービスの状態をチェック

@echo off
setlocal

set SERVICE_NAME=Winmgmt

sc query %SERVICE_NAME% | find "RUNNING" > nul 2>&1
if errorlevel 1 (
    echo サービス %SERVICE_NAME% は停止しています
) else (
    echo サービス %SERVICE_NAME% は実行中です
)

endlocal
exit

終了コード

findコマンドは、実行結果に応じて以下の終了コードを返します。

終了コード説明
0検索文字列が見つかった
1検索文字列が見つからなかった
2検索ファイルが見つからない、または無効なスイッチが指定された

これらの終了コードを使用して、バッチファイル内で条件分岐を行うことができます。

注意事項

チェック

findコマンドではワイルドカード(*?)を検索文字列内で使用することはできません。 正規表現やワイルドカードを使った検索を行いたい場合は、findstrコマンドを使用してください。

チェック

検索文字列にダブルクォーテーションを含める場合は、各クォーテーションを二重にする必要があります。 例: find """quoted text""" file.txt

findstr コマンドとの違い

findコマンドは単純な文字列検索に適していますが、より高度な検索を行いたい場合はfindstrコマンドを使用することをお勧めします。

findstrコマンドの主な利点:

  • 正規表現のサポート
  • 複数の検索文字列を指定可能
  • より多くのオプションが利用可能

まとめ

findコマンドは、ファイル内やコマンド出力から特定の文字列を検索するための便利なツールです。

主な特徴:

  • シンプルで使いやすい構文
  • 大文字と小文字を区別しない検索が可能
  • パイプと組み合わせて柔軟な検索が可能
  • バッチファイルでの自動化に適している
  • 終了コードによる条件分岐が可能

ログファイルの解析、設定ファイルのチェック、コマンド出力のフィルタリングなど、様々な場面で活用できます。

#PowerShell #コマンドプロンプト #バッチファイル