thumbnail 一問一答の一歩

【コマンドプロンプト】サブフォルダも含めて指定した文字列を一括検索する

会社などでプログラムのソースコードを調査するとなると、ソースコードが分散していて関数の定義箇所や指定したの文字列を検索するのにも一苦労となる。

自由にソフトをいれることができる場合は「さくらエディタ」をインストールして「Ctrl + G」を押してあげればGUIでGrep機能を使えて一発なのだが、会社によっては使用ソフトが制限されていて使用できないことがある。

その場合、サブフォルダを含めてファイル内の文字列を一括検索するのに一苦労したので、バッチファイルを作成してコマンド一つで調査できるようにした。

作成するバッチファイル(grep.bat)は下記の通り。

なお、サブフォルダ内の文字列検索で使う場合は第一引数に”-r”を入力する必要がある

@echo off
if %1==-r (
	if "%~2"=="" (
		echo "第一引数に-r設定時は引数は最低2つ入力してください"
		echo "第一引数: -r"
		echo "第二引数: 検索文字列"
		echo "第三引数:検索対象フォルダ"
		echo "第四引数:拡張子(例:*.txt)"
	) else (
		rem 対象文字列を第二引数から取得
		set targetstr=%2
		rem 対象フォルダを第三引数から取得。ただし、引数のなしの場合は現在のディレクトリとみなす
		if "%3"=="" (
		set targetFolder=%CD%
		) else (
		set targetFolder=%3
		)
		if "%4"=="" (
		set targetFile=*
		) else (
		rem 対象ファイルを第四引数から取得。ただし、デフォルト場合は全ファイルを対象にする
		set targetFile=%4
		)

		rem 指定フォルダ配下(サブフォルダを含む)の全ての対象ファイルに対して処理を行う
		for /r "%targetFolder%\" %%f in ("%targetFile%") do ( 
			rem ファイル名を画面へ出力
			echo %%f
			type %%f | findstr %targetstr%
			echo.
		)
	)
) else (
	findstr %1
)

問題ページに戻る