変数の作成
バッチファイルを使用している際、同じ文字列を何度も使用することはありませんか?
例えば、特定のファイルをコピーした後、コピー済みフォルダに移動させる場合、以下のように同じパスを何度も書くことになります。
copy C:\Users\user\Documents\sample.txt C:\Users\user\Documents\copied\sample.txt
move C:\Users\user\Documents\sample.txt C:\Users\user\Documents\moved\sample.txt
コピーする際と移動する際(copyとmove)、C:\Users\user\Documents\sample.txtを 2 回書いています。
これでも問題はありませんが、同じ文字列を何度も書くと、打ち間違いの原因になったり、修正が面倒になったりします。
こういった問題を解決するために、バッチファイルでは変数を定義することができます。
変数を定義することで、同じ文字列を何度も書く必要がなくなり、打ち間違いの原因を減らすことができます。
前述した例を変数を使って書き換えると、以下のようになります。
set source=C:\Users\user\Documents\sample.txt
copy %source% C:\Users\user\Documents\copied\sample.txt
move %source% C:\Users\user\Documents\moved\sample.txt
2 回記述していたC:\Users\user\Documents\sample.txtを、変数sourceに代入しています。
こうすることで、%source%と書くだけで、C:\Users\user\Documents\sample.txtと同じ意味になります。
このページでは、バッチファイルで変数を定義する方法と、変数を使った具体例を紹介します。
変数を定義する方法
変数を定義するには、setコマンドを使用します。
set 変数名=値
setコマンドの後に、変数名と値を指定します。
イコールの前後にはスペースを入れてはいけません。set name = valueと書くと、変数名がname (末尾にスペース)、値が value(先頭にスペース)として扱われてしまいます。
変数名は大文字・小文字を区別しません。%Source%と%SOURCE%は同じ変数を指します。
定義した変数を参照するときは、%変数名%のように前後を%で囲みます。
実務では set "name=value"
のように全体をダブルクォートで囲む書き方がよく使われます。末尾に意図しないスペースが入る事故を防ぎやすいためです。
set "source=C:\Users\user\Documents\sample.txt"
変数の確認と削除
引数なしでsetを実行すると、現在定義されている変数の一覧が表示されます。set 文字列のように指定すると、その文字列で始まる変数だけを表示できます。
変数を削除するには、イコールの右側を空にします。
set source=
なお、setで定義した変数は、そのバッチファイルを実行しているコマンドプロンプトの間だけ有効で、永続的には保存されません。バッチファイルの実行後も変数を残したくない場合は、setlocal〜endlocalで囲みます。
set コマンドのオプション
setコマンドには前述した変数を予め定義しておける他、オプションの指定によっては、バッチファイルを実行した際にユーザーからの入力を受け付けることもできます。
/P オプション
/Pオプションを指定すると、ユーザーからの入力を受け付けることができます。
set /P 変数名=表示メッセージ
上記のコマンドは「変数名」という変数に「表示メッセージ」という文字列を代入する、という意味ではありません。
/Pオプションを指定すると、setコマンドはユーザーからの入力を受け付けるようになります。
変数に格納する値を受け付ける際に画面上に表示されるメッセージが「表示メッセージ」にあたる部分です。
実際に上記のバッチファイルを実行した場合は以下のように表示されます。
ユーザーからの入力を受け付けるまでは待機状態となり、setコマンド以降の処理は実行されません。
ユーザーが値を入力し、Enter キーを押すと、入力された値が変数に代入され、setコマンド以降の処理が実行されます。
変数を使った具体例
文字列の結合
変数と文字列
変数と特定の文字列を結合するには演算子は必要なく、%変数名%文字列と書きます。
set source=C:\Users\user\Documents\sample
echo %source%.txt
変数と変数
変数と変数の場合も同様で、%変数名%%変数名%と書きます。
set source=C:\Users\user\Documents\sample
set extension=.txt
echo %source%%extension%
数式の計算
set /Aを使うと、数式の計算結果を変数に代入できます。/Aでは変数名を%で囲まなくても参照できます。
set /A total=10+5*2
echo %total%
上記は20を表示します。/Aが扱えるのは整数のみで、除算の小数部分は切り捨てられます。
次の例は、for /Lで 1 から 10 までを繰り返し、変数に加算していきます。
@echo off
setlocal
set x=0
for /L %%i in (1, 1, 10) do (
set /A x=x+%%i
)
echo %x%
endlocal
上記のバッチファイルを実行すると、以下のように表示されます。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
for (...) do (...) の中で %変数名%
をそのまま参照すると、期待どおりに更新されないことがあります。そのような場合は遅延環境変数展開を使います。
環境変数を利用する
バッチファイルでは、自分で定義した変数の他に、予め定義された環境変数を利用することもできます。
環境変数は、Windows が提供する変数で、Windows に関する情報を格納しています。
なお、下表の%CD%、%DATE%、%TIME%、%RANDOM%、%ERRORLEVEL%は、参照した時点の値を返す動的な変数で、setの一覧には表示されません。使い方は他の環境変数と同じです。
環境変数の一覧
| 環境変数 | 説明 |
|---|---|
| %CD% | 現在のディレクトリのパス |
| %DATE% | 現在の日付 |
| %TIME% | 現在の時刻 |
| %RANDOM% | 0 から 32767 の乱数 |
| %ERRORLEVEL% | 直前に実行したコマンドの終了コード |
| %USERNAME% | 現在のユーザー名 |
| %COMPUTERNAME% | コンピューター名 |
| %OS% | OS の種類 |
| %PROCESSOR_ARCHITECTURE% | プロセッサーの種類 |
| %NUMBER_OF_PROCESSORS% | プロセッサーの数 |
| %SYSTEMROOT% | システムフォルダのパス |
| %TEMP% | 一時フォルダのパス |
| %PATHEXT% | 実行可能な拡張子の一覧 |
| %PATH% | 実行可能なファイルのパス |
| %HOMEDRIVE% | ホームフォルダのドライブ(通常は「C:」) |
| %HOMEPATH% | ホームフォルダのパス |
| %USERPROFILE% | ユーザーフォルダのパス |
| %APPDATA% | アプリケーションデータのパス |
| %PROGRAMFILES% | プログラムファイルのパス |
| %COMMONPROGRAMFILES% | 共通のプログラムファイルのパス |
| %COMMONPROGRAMFILES(x86)% | 共通の 32 ビットプログラムファイルのパス |
| %PUBLIC% | 共有フォルダのパス |
| %ALLUSERSPROFILE% | 共有のユーザーフォルダのパス |
%userprofile%などはよく使うため、覚えておくと便利です。
環境変数を利用した具体例
ユーザーフォルダ直下にファイルを作成する
@echo off
setlocal
echo sample > "%USERPROFILE%\sample.txt"
endlocal
%USERPROFILE% を使うことで、実行ユーザーごとに異なるユーザーフォルダをハードコードせずに扱えます。