変数の作成
バッチファイルを使用している際、同じ文字列を何度も使用することはありませんか?
例えば、特定のファイルをコピーした後、コピー済みフォルダに移動させる場合、以下のように同じパスを何度も書くことになります。
copy C:\Users\user\Documents\sample.txt C:\Users\user\Documents\copy\sample.txt
move C:\Users\user\Documents\sample.txt C:\Users\user\Documents\copied\sample.txt
コピーする際と移動する際、C:\Users\user\Documents\sample.txtを 2 回書いています。
これでも問題はありませんが、同じ文字列を何度も書くと、打ち間違いの原因になったり、修正が面倒になったりします。
こういった問題を解決するために、バッチファイルでは変数を定義することができます。
変数を定義することで、同じ文字列を何度も書く必要がなくなり、打ち間違いの原因を減らすことができます。
前述した例を変数を使って書き換えると、以下のようになります。
set source=C:\Users\user\Documents\sample.txt
copy %source% C:\Users\user\Documents\copy\sample.txt
move %source% C:\Users\user\Documents\copied\sample.txt
2度記述していたC:\Users\user\Documents\sample.txtを、変数sourceに代入しています。
こうすることで、%source%と書くだけで、C:\Users\user\Documents\sample.txtと同じ意味になります。
このページでは、バッチファイルで変数を定義する方法と、変数を使った具体例を紹介します。
変数を定義する方法
変数を定義するには、setコマンドを使用します。
set 変数名=値
setコマンドの後に、変数名と値を指定します。
イコールの前後にはスペースを入れてはいけません。
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コマンドを使用し、変数に繰り返し結果を格納することで、数式の計算を行うことができます。
@echo off
setlocal
set x=0
for /L %%i in (1, 1, 10) do (
set /A x=x+%%i
)
echo %x%
endlocal
上記のバッチファイルを実行すると、以下のように表示されます。
環境変数を利用する
バッチファイルでは、自分で定義した変数の他に、予め定義された環境変数を利用することもできます。
環境変数は、Windows が提供する変数で、Windows に関する情報を格納しています。
環境変数の一覧
| 環境変数 | 説明 |
|---|---|
| %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
cd %userprofile%
dir
endlocal