計算する

多くのバッチファイルの処理では、上記のような一時的なデータ保存の目的で環境変数が用いられますが、より高度でプログラム的なバッチ処理を実現するには計算が必要になるでしょう。バッチファイルにおいても、加算や乗算といった基本的な四則演算や、2進数のビットを直接扱うビット単位の論理演算やシフト演算など、多くのプログラミング言語に共通する一般的な式を実行できます。

式を実行して結果を得るには、次の set コマンドを使います。

set /A 式

/Aオプションに続くパラメータに、このsetコマンドで計算する任意の式を指定します。式は計算を行う値となる項と、項の操作方法を表す演算子の組み合わせです。演算子はC言語など、他の一般的なプログラミング言語と共通しているため、本稿内での詳細な説明は割愛いたします。簡単な算術演算であれば、算数のルールと同じです。

set /A 1 + 2

上記のコマンドを、コマンドプロンプトを起動してキーボードから入力して実行すると3という計算結果が表示されます。

コマンド入力でsetコマンドを実行すると、式の計算結果がコマンドに表示されます。これに対しバッチファイルの処理で式を計算した場合は、結果は画面に表示されません。スクリプト的な処理で利用するには、代入演算子 = を用いて、任意の変数に結果を保存します。

set /A VALUE = 1 + 2

このsetコマンドを実行すると1 + 2の計算結果3がVALUE変数に保存されます。

環境変数を式の項として指定することもできます。何らかの計算結果を保存する変数を、さらに別の式で計算させるといったことが可能です。

set /A VALUE = %X% + %Y%

このsetコマンドは、A変数とB変数の値を加算し、その結果をVALUE変数に保存します。

サンプル05

@echo off

set /A VALUE=10+5*2
echo 10+5*2=%VALUE%

set /A VALUE=(10+5)*2
echo (10+5)*2=%VALUE%

set /A VALUE=%VALUE%/2
echo %%VALUE%%/2=%VALUE%

pause

実行結果

サンプル05の実行結果

サンプル05は、簡単な式の計算結果を VALUE 変数に保存し、その結果をechoコマンドで出力しています。最初のsetコマンドでは10 + 5 * 2という式を計算しています。この場合、演算子の優先順位が高い*演算子が先に処理されるので5 * 2が計算されます。この結果に対して + 演算子の処理が行われるため、結果は20となります。

計算順序を変えるには、優先したい式を ( ) で括ります。2番目のsetコマンドでは(10 + 5) * 2という式を計算しています。この場合、括弧で括られている加算演算が優先され10 + 5が先に求められます。この結果に2が掛けられるため、結果は30となります。

最後のsetコマンドは、直前のsetコマンドの結果を保存しているVALUE変数の値を2で割っています。この除算演算子の左項に%VALUE%が指定されているところに注目してください。この場合VALUE変数に保存されている文字列が式として用いられるため、直前の計算結果である30が割り当てられます。結果は30 / 2が計算されて15となります。

さらに、値の入っている変数を式の項として使うだけではなく、式そのものを文字列として保存している変数を計算させるといったことも可能です。setコマンドのパラメータに、有効な名前や式が保存されている変数を使うことで、動的に作成する環境変数の名前や計算する式を変更できます。

サンプル06

@echo off

set VAR_NAME=VALUE
set EXPR=7+6-5
set /A %VAR_NAME%=%EXPR%

set %VAR_NAME%

pause

実行結果

サンプル06の実行結果

サンプル06では、最初のsetコマンドでは代入する変数名を表すVAR_NAME変数を作成し、VALUEという文字列を保存しています。続くsetコマンドで、式を表す文字列をEXPR変数に保存します。そしてsetコマンドの式で%VAR_NAME%=%EXPR%という式を指定し、あらかじめ作成した変数に保存されている変数名や式を使って計算を行います。

VAR_NAME 変数にはVALUEという文字列が保存されているため、式の結果はVALUE変数に保存されています。最後のsetコマンドで、VAR_NAME変数に保存されている文字列、すなわちVALUEの値を表示しています。