バッチファイルを使おう(初心者向け・変数編)

プログラムを組んだ経験がある方は「変数」というものが必須であることはご存知だと思います。その都度、リテラルで書いてコーディングするとなると、とても簡単なプログラムでも時間がかかって仕方が無いですし、何よりもバグの温床になりかねません。バッチファイルにも勿論、変数があります。今回は、バッチファイルの変数の利用方法を紹介します。

バッチファイルの変数

「変数とは何ぞや」という説明は省きます。もし「変数って何?」と言う方は、恐らくプログラム未経験の方だと思うので、申し訳ないですが、まずは「変数」と検索してご自身で調べて下さい。

変数を設定する

バッチファイルの変数を設定する方法はとても簡単です。setコマンドを使用します。使い方は下記の様に記述します。

set 変数名=文字列

たったこれだけです。とても簡単ですね。ここで注意して頂きたいのですが、『変数名』と『=』と『文字列』の間に半角スペースなどを入れないで下さい。『変数名』の部分には任意の変数名を指定します。『文字列』には任意の文字列を指定します。もう少し具体的な例文は下記の様に記述します。

set hoge=Hello,World

hoge』という変数に『Hello,World』という文字列を代入しました。変数の設定はこれで完了です。

変数を使う

変数を設定したからには当然、その変数を使用出来ます。使用する場合は、変数名の両端を「%」で括ってあげます。簡単な例を1つ紹介します。変数を使用するためにバッチを一つ作成しましょう。ファイル命名は任意で良いので、拡張子「.bat」のファイルを1つ作成します。そして、そのバッチファイルの中に以下の様に記述して保存します。

@echo off

set hoge=Hello,World

echo %hoge%

pause

上記を記述してバッチファイルを保存したら、そのバッチファイルをダブルクリックします。そうすると、以下の様にコマンドプロンプトに表示されます。

Hello,World

続行するには何かキーを押してください . . .

何が起こったのかと言うと、作成したhogeという変数の中身をechoコマンドでコマンドプロンプトに表示させました。例としてechoコマンドの引数に変数を渡しましたが、他のコマンドでも同様に変数を引数として渡せば、変数に設定した値を使用出来ます。

変数で数値を扱う

先ほどの例文では文字列を代入していました。DOS先生にhelpコマンドで尋ねてみると、setの説明がとてつもなく長いので本記事で抜粋します。コマンドプロンプトの画面に以下の様に入力してEnterキーを押下して下さい。

help set

とても長い説明が表示されますが、冒頭には次のように記載されています。

cmd.exe 環境変数を表示、設定、または削除します。
SET [変数名=[文字列]]
変数名 環境変数名を指定します。
文字列 変数に割り当てる文字列を指定します。

そう、DOS先生の説明では「文字列」としか記載されていないのです。ここで冒険は終わってしまいましたね。本当にありがとうございました。というのは冗談で、実はオプションを使用すれば数値を扱うことが可能です。DOS先生にhelpで尋ねた画面が残っていたら、少しずつスクロールしてみて下さい。すると、以下の記述があります。

SET コマンドには、2 つの新しいスイッチが追加されています:
    SET /A 式
    SET /P 変数=[プロンプト文字列]
/A スイッチは、等号の右側の文字列が、評価する数式であることを指定します。
式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:
    ()                  - グループ化
    ! ~ -               - 単項演算子
    * / %              - 算術演算子
    + -                 - 算術演算子
    << >>               - 論理シフト
    &                    - ビット演算子 AND
    ^                   - ビット演算子排他的 OR
    |                   - ビット演算子 OR
    = *= /= %= += -=   - 代入
      &= ^= |= <<= >>=
    ,                   - 式の区切り記号

少し長いですね。熟読すると意味が理解出来るのですが、まあいきなりは難しいので、端的に説明すると、「/a」を使えば値として扱えるよということです。例えば、「/a」オプションを使用せずに足し算をするとどうなるのでしょうか?

@echo off

set x=10

set y=15

set result=x+y

echo %result%

pause

上記のバッチを作成して実行すると、次の様にコマンドプロンプトに表示されます。

x+y

続行するには何かキーを押してください . . .

何かあれですね、想定していたのと違う感じがしますね。数値を変数に代入したのに、結果が数値を連結するどころか、変数名が連結されてるという、コーディング間もない時によくありそうな感じがします。

では「/a」オプションを使いましょう。計算式を実行している部分のsetコマンドの直後に「/a」を記入して、再度バッチを実行してみます。

@echo off

set x=10

set y=15

set /a result=x+y

echo %result%

pause

上記のバッチを実行した結果、DOS先生からお返事を頂きました。

25

続行するには何かキーを押してください . . .

見事計算出来ましたね。数値を扱うことが目的でしたので、これでミッションコンプリートです。実際に数値を扱うことがあるのかは微妙ですが、参考までに認識頂ければと思います。

まとめ

バッチファイルを使うにあたって必要不可欠な変数について紹介させて頂きました。setコマンドの直後に変数名を記載して、文字列を代入するし、使用したい時は「%」で括ってあげるだけです。これから重宝すると思うので、是非覚えて頂きたいと思います。