コマンドプロンプト
アイキャッチ 猫

今回はフォルダ内の全てのバッチを実行する方法を紹介します。
例えば、プログラム開発時におけるテスト処理の自動実行等に使えると思いますので、良かったらコピペしてご使用ください♪

コード内容

フォルダ内の全てのバッチを実行する方法は以下のコードになります。

@ECHO OFF

@REM フォルダ内の全てのバッチを再帰的に実行
FOR /R %%I IN ([バッチ名]) DO (
	@REM バッチファイルが存在すれば実行
	IF EXIST %%I (
		ECHO %%I
		CALL %%I
	)
)

上記コードを簡単に説明します。

・[FOR /R]
FOR文は引数に何もつけないと同一階層のファイルを見に行きますが、
/Rをつけることで、サブフォルダも含め全てのフォルダを見に行ってくれます。

・[%%I IN ([バッチ名])]
%%Iに[バッチ名]のパスが入ります。
[バッチ名]はフォルダ内で実行したいバッチファイルのファイル名です。

・[DO (IF EXIST %%I CALL %%I)]
DO以降が実行する内容で、もしフォルダ内に指定のバッチファイルが存在すれば実行します。

コード説明は以上です。
ただこれだけではイメージが湧きにくいと思いますので、次項で実際の使用例を紹介します。

使用例(テスト処理の自動実行)

プログラム開発時におけるテスト処理の自動実行の例です。
テスト処理の自動実行バッチを作っておけば、初回の開発時だけでなく、プログラム変更があって再処理することになっても、同じテスト内容であればすぐに対応できます。

・フォルダ内のテストバッチを全て実行していくバッチ(ALLTEST.bat)

@ECHO OFF

@REM フォルダ内の全てのテストバッチを再帰的に実行
FOR /R %%I IN (TEST.BAT) DO (
	@REM テストファイルが存在すれば実行
	IF EXIST %%I (
		ECHO %%I
		CALL %%I
	)
)

PAUSE

・テストバッチ(TEST.bat)

@ECHO ********************
@ECHO * テストバッチ実行 *
@ECHO *******************+
@ECHO.

・テスト環境

C:\テスト
│  ALLTEST.bat
│
├─1
│  ├─1-1
│  │  │  TEST.bat
│  │  │
│  │  ├─Input
│  │  └─Output
│  └─1-2
│      ├─1-2-1
│      │  │  TEST.bat
│      │  │
│      │  ├─Input
│      │  └─Output
│      └─1-2-2
│          │  TEST.bat
│          │
│          ├─Input
│          └─Output
└─2
    │  TEST.bat
    │
    ├─Input
    └─Output

上記の環境で、フォルダ内のテストバッチを全て実行していくバッチ(ALLTEST.bat)を実行すると、結果は以下になりました。

C:\テスト\1\1-1\TEST.BAT
********************
* テストバッチ実行 *
*******************+

C:\テスト\1\1-2\1-2-1\TEST.BAT
********************
* テストバッチ実行 *
*******************+

C:\テスト\1\1-2\1-2-2\TEST.BAT
********************
* テストバッチ実行 *
*******************+

C:\テスト\2\TEST.BAT
********************
* テストバッチ実行 *
*******************+

全てのテストバッチが問題なく実行されました。

なお、今回のようにすべてのテストバッチを実行する場合であれば、以下のようにテストバッチにエラーレベルを出力する工夫等すると、より良いかもしれませんね。

@ECHO ********************
@ECHO * テストバッチ実行 *
@ECHO *******************+
call hogehoge.bat Input Output
echo %errorlevel% > Output\エラーレベル[%errorlevel%].txt

最後に

今回は、フォルダ内の全てのバッチを実行する方法を紹介しました。

使用例にあげた、テスト処理の自動実行は私も実際にテストで使っていた手法です。
この方法が通じるのは主にCUIのプログラムですが、GUIでもプログラムの作り次第(例えば、テスト用にプログラムに引数を与えれば動くようにする等)で一括テストも可能でしょうから、この機会にご検討いただけたら嬉しいです。

以上、今回の記事が何かの参考になれば幸いです。来訪ありがとうございました♪