Categories: Windows

Windowsのbat(バッチファイル)で変数を扱う方法

本記事では、Windowsのバッチファイルで変数を扱う方法を紹介します。

バッチファイルで変数を扱う方法(setコマンド)

Windowsのバッチファイルで変数を扱うためにはsetコマンドを利用します。一番シンプルな記述としては、下記のように記述を行います。

set [変数名]=[変数に格納する値]

例を見るのが一番わかりやすいと思うので、例と実行結果を紹介します。

以下のサンプルではxという変数に2を、yという変数に3を代入し、それらをechoコマンドでコンソールに表示しています。

変数にアクセスする方法は%[変数名]%です。

@echo off

set x=2
set y=3

echo %x%
echo %y%

pause

setコマンドで定義される変数の型

プログラミング言語によっては、変数の型を意識しなければならないケースもあります。例えばC言語であれば、数値であれば「int x」、文字であれば「char x」のように、変数の中に入っているものが数値なのか文字なのかを定義の時点で明示的に区別して記述する必要があります。

さて、バッチファイルの中で「set」を使って定義された変数はどのような型を持つのかですが、「set x=2」の場合、xの型は文字列です。数値ではありません。

つまり、2という「文字」が記録されていて、2という数字が入っているわけではありません。

ここで問題です。下記のように記述した場合、コンソールにはどのように表示されるでしょうか。「%x%」は2を、「%y%」は3を指していて、その間が+(プラス)で繋がれています。

@echo off

set x=2
set y=3
set z=%x%+%y%

echo %z%

pause

実行すると、以下のような結果となります。

変数値は全て文字列で扱われるので、zに入るのは「2+3」という文字列であり、2+3の演算結果(すなわち5)が出力されるわけではありません。

setをオプション無しで使用した場合には、型が文字列になるということは意識する必要があります。

変数を数値で扱う方法

しかしながら、2+3=5のような数値演算をしたい場合がありますよね。変数が全て文字列になってしまうのは、このような用途においては不便です。

変数を数値で扱う方法は簡単で、オプションとしてsetコマンドの後に「/a」を付けるだけです。

@echo off

set /a x=2
set /a y=3
set /a z=%x%+%y%

echo %z%

pause

ちなみに、「x=2」「y=3」は必ずしも数値として定義する必要はなく、下記のように5行目のみ「/a」をつけても同様の動作をします。数値計算を行うのは5行目のみだからでしょうか。

@echo off

set x=2
set y=3
set /a z=%x%+%y%

echo %z%

pause

実行結果は以下となります。

まとめ

バッチファイルで変数を扱う場合はsetコマンドを使えば良いですが、変数を文字列で扱うのか、数値で扱うのかで記述方法が異なりますので、注意が必要です。

変数を数値で扱いたい場合には「/a」をsetコマンドの後に付ける必要があります。

Haruoka