バッチファイルに複雑な処理を記述する場合や、同じ処理を何度も記述する場合、他のプログラム言語と同じように関数(サブルーチン)を使いたくなります。
本記事では、Windowsのbat(バッチファイル)で関数(サブルーチン)を扱う方法について紹介したいと思います。
目次
関数(サブルーチン)の記述方法
関数を呼び出す方法と、関数自体の記述方法について紹介します。
関数の実行方法
関数を実行する場合は、以下の文法で記述します。その関数名の関数がどこかで記述されている必要があります。引数を与えるかはオプションです。
call :関数名 [引数]
関数自体の記述方法
関数自体の記述方法は以下となります。こちらもオプションですが、戻り値を与えることもできます。
:関数名
処理
exit /b [戻り値(数値)]
関数(サブルーチン)を用いたバッチファイルの例
戻り値や引数を用いないプログラムの例
非常にシンプルなバッチファイルですが、以下は「test_function」という関数を3回実行する関数となっています。関数の中で「echo test」がされ、コンソールに「test」という文字が出力されます。
@echo off
echo startz
call :test_function
call :test_function
call :test_function
echo finish
pause
:test_function
echo test
exit /b
実行すると以下のような結果となります。
引数を利用するプログラムと例
引数を利用する場合は、以下のように関数名の後に渡したい引数を指定します。今回は「abc」と「def」を渡しています。引数は複数でも渡すことができます。
関数内で引数にアクセスする場合は「%1」「%2」……を使います。%1が一個目の引数に該当する変数です。
@echo off
echo start
call :test_function abc def
echo finish
pause
:test_function
echo %1
echo %2
exit /b
上記を実行すると、以下の出力が得られます。
戻り値を利用するプログラムと例
Windowsのバッチファイルでは、戻り値として指定できるのは一つの数値のみとなります。「exit \b」の後に戻り値を指定します。以下のプログラムでは「10」が該当します。
戻ってきた値は「%errorlevel%」で参照が可能です。名前からわかる通り、最後まで実行できたら「0」を返すなど、エラーをチェックする用途で使うことを想定しているようです。
@echo off
echo start
call :test_function abc def
echo %errorlevel%
echo finish
pause
:test_function
echo %1
echo %2
exit /b 10
実行すると以下のような結果となります。10という値が返っていることがわかります。