バッチファイルでも変数を使うことができます。
この記事では、変数の使い方について解説します。
変数の宣言方法
変数は『set』コマンドを使います。
set 変数名=文字列
変数に代入された文字列を展開するときは、変数名を『%』で囲みます。
次のバッチファイルは、3行目で変数「name」に「Bob」を代入して、4行目で変数「name」に代入された文字列を表示させています。
@echo off
set name=Bob
echo %name%
pause

バッチファイルの作り方については、こちらの記事を参考にしてください。
同じ名前の変数がすでに存在する場合は、上書きされます。
@echo off
set name=Bob
echo %name%
set name=Alice
echo %name%
pause

一般的なプログラム言語と違い、バッチファイルでは、変数に文字列を代入するときに『”(ダブルクォーテーション)』で囲む必要はありません。
以下のバッチファイルを実行してみます。
@echo off
set name="Bob"
echo %name%
pause

『”』も合わせて表示されています。
また、他のプログラミング言語だと「=」の前後のスペースは無視されますが、バッチファイルだとスペースも1文字として認識されます。
以下のバッチファイルを見てください。
変数名は「name」ではなく「name 」のように、スペース1文字分も合わせた名前になっています。
「name」は宣言されていないため、「ECHOは<OFF>です。」と表示されます。
また代入された文字列も「 Bob」のように初めにスペースが含まれた文字列になります。
@echo off
set name = Bob
rem これは別の変数として判定される
echo %name%
rem スペースも含んだ変数名になっている
echo %name %
pause

バッチファイルでは、「=」の前後にはスペースを入れないようにしましょう。
ユーザーの入力を受け取る
『/p』を使えば、ユーザーに入力を求めて、その結果を変数に代入することができます。
set /p 変数名=入力を求めるメッセージ
次のバッチファイルを実行すれば「Enter your name:」と表示されます。
その後、「Bob」と入力して「Enter」を押下すれば「Hello Bob」と表示されます。
@echo off
set /p name=Enter your name:
echo Hello %name%
pause

計算式の結果を代入する
『/a』を使えば、計算式の結果を変数に代入することができます。
set /a 変数名=計算式
『/a』がないときは数式がそのまま表示されますが、『/a』を使うことで計算の結果が変数に代入されます。
@echo off
set formula=1+1
echo %formula%
set /a result=1+1
echo %result%
pause

設定されている変数を確認する
『set』コマンドを実行すれば、設定されている変数を表示できます。
自分で設定した「a1」から「a6」以外の環境変数も表示されています
@echo off
set a1=test1
set a2=test2
set a3=test3
set a4=test4
set a5=test5
set a6=test6
set
pause

値を指定すれば、その値で始まるすべての変数が表示されます。
@echo off
set a1=test1
set a2=test2
set a3=test3
set a4=test4
set a5=test5
set a6=test6
set a
pause

特殊文字
以下の文字は、特殊な文字のためそのままでは変数に代入することができません
- <
- >
- |
- &
- ^
次のバッチファイルでは3行目の「&」より後ろはコマンドとして認識されるため、「name」には「Bob」しか代入されていません。
@echo off
set name=Bob&Alice
echo %name%
pause

これらの文字を変数に代入したいときは、次の方法を使います。
- エスケープ文字『^』を使う
- 引用符『”』で囲む
エスケープ文字『^』を使う
変数に代入したい特殊文字の前に『^』をつけます。
@echo off
set name=Bob^&Alice
set name
echo %name%
pause

5行目の『set』コマンドで「name」に「Bob&Alice」が格納されているのがわかります。
7行目の『echo %name%』で変数を表示してますが、「&」が文字列ではないため「Bob」しか表示されていません。
引用符『”』で囲む
対象の文字列を『”』で囲みます。
この場合は、引用符も文字列の一部として代入されることに注意が必要です。
@echo off
set name="Bob&Alice"
set name
echo %name%
pause

まとめ
変数は、『set』コマンドを使います。
- set 変数名=文字列
- %変数名%:変数の展開
- /p:ユーザーの入力を変数に代入
- /a:計算式を変数に代入
- set:設定されている変数の一覧表示
- 特殊文字は『^』でエスケープするか『”』で囲む
バッチファイルを使えば、いろいろな作業を効率化することができます。