Windowsで作業を自動化したいとき、バッチファイル(.batファイル)はとても便利なツールです。
でも「変数の使い方がよくわからない」「%の書き方がややこしい」と感じている方も多いのではないでしょうか?
この記事では、バッチファイルでの変数の使い方を基礎から応用まで、実際のコード例とともにわかりやすく解説します。
バッチファイルの変数って何?

変数とは「値を入れておく箱」
変数とは、文字や数字などの値を一時的に保存しておく「箱」のようなものです。
この箱に名前を付けて、後から中身を取り出して使うことができます。
なぜ変数を使うの?
- 同じ値を何度も使い回せる
- ユーザーからの入力を受け取れる
- 処理の途中で値を変更できる
- スクリプトを柔軟で再利用しやすくできる
基本的な仕組み
バッチファイルでは、次のような形で変数を使います:
set 変数名=値 ← 変数に値を入れる
echo %変数名% ← 変数の値を表示する
実際の例を見てみましょう:
@echo off
set name=田中
echo こんにちは、%name%さん!
実行結果:
こんにちは、田中さん!
変数の基本的な使い方

文字列を変数に入れる
@echo off
set message=今日はいい天気ですね
echo %message%
数字を変数に入れる
@echo off
set number=100
echo 数値は %number% です
重要な注意点
スペースに注意!
set name=田中 ← 正しい書き方
set name = 田中 ← 間違い(スペースがあるとエラー)
変数を使うときは%で囲む
echo %name% ← 正しい(変数の値が表示される)
echo name ← 間違い(「name」という文字が表示される)
ユーザーからの入力を受け取る

基本的な入力取得
set /p
コマンドを使うと、ユーザーに文字を入力してもらえます:
@echo off
set /p username=お名前を入力してください:
echo こんにちは、%username%さん!
pause
実行例:
お名前を入力してください:山田
こんにちは、山田さん!
複数の入力を受け取る
@echo off
set /p name=お名前:
set /p age=年齢:
echo %name%さんは%age%歳ですね
pause
計算もできる変数
数値の計算
set /a
を使うと、変数で計算ができます:
@echo off
set /a result=10+5
echo 10 + 5 = %result%
set /a number=100
set /a doubled=%number%*2
echo %number%の2倍は%doubled%です
ユーザー入力と計算の組み合わせ
@echo off
set /p num1=1つ目の数字:
set /p num2=2つ目の数字:
set /a sum=%num1%+%num2%
echo %num1% + %num2% = %sum%
pause
条件分岐で変数を活用

if文での比較
@echo off
set /p password=パスワードを入力:
if "%password%"=="secret" (
echo ログイン成功!
) else (
echo パスワードが間違っています
)
pause
重要なポイント
- 変数を比較するときは
"%変数名%"
のように””で囲む - これにより、変数が空でもエラーにならない
複数の条件
@echo off
set /p grade=成績を入力(A/B/C):
if "%grade%"=="A" (
echo 優秀です!
) else if "%grade%"=="B" (
echo 良好です
) else if "%grade%"=="C" (
echo がんばりましょう
) else (
echo 正しい成績を入力してください
)
pause
繰り返し処理での変数

基本的なfor文
@echo off
for %%i in (1 2 3 4 5) do (
echo 数字:%%i
)
pause
注意点
- バッチファイル内では
%%i
(%を2つ) - コマンドプロンプトで直接実行するときは
%i
(%を1つ)
ファイル処理での活用
@echo off
for %%f in (*.txt) do (
echo テキストファイル:%%f
)
pause
便利な特殊変数
よく使う特殊変数
変数 | 内容 | 使用例 |
---|---|---|
%~dp0 | バッチファイルがあるフォルダ | cd %~dp0 |
%date% | 今日の日付 | echo %date% |
%time% | 現在の時刻 | echo %time% |
%cd% | 現在のフォルダ | echo %cd% |
%username% | ログインユーザー名 | echo %username% |
実用的な例
@echo off
echo バッチファイルの場所:%~dp0
echo 実行日時:%date% %time%
echo 実行ユーザー:%username%
echo 現在のフォルダ:%cd%
pause
コマンドライン引数
バッチファイルを実行するときに値を渡せます:
@echo off
echo 1番目の引数:%1
echo 2番目の引数:%2
echo 3番目の引数:%3
pause
実行方法:
mybatch.bat Hello World 123
結果:
1番目の引数:Hello
2番目の引数:World
3番目の引数:123
環境変数との違い
一時変数と永続変数
一時変数(set)
- そのバッチファイルが動いている間だけ有効
- バッチファイルが終了すると消える
set temp_var=一時的な値
永続変数(setx)
- パソコンに保存される
- 再起動しても残る
setx MY_TOOL_PATH "C:\MyTools"
注意: setxで設定した変数は、新しいコマンドプロンプトで有効になります。
実用的な例

ファイルバックアップスクリプト
@echo off
set backup_date=%date:~0,4%%date:~5,2%%date:~8,2%
set source_folder=C:\重要なファイル
set backup_folder=D:\バックアップ\%backup_date%
echo %backup_date%のバックアップを作成します
echo コピー元:%source_folder%
echo コピー先:%backup_folder%
if not exist "%backup_folder%" mkdir "%backup_folder%"
xcopy "%source_folder%" "%backup_folder%" /s /e /y
echo バックアップが完了しました
pause
ログファイル作成
@echo off
set log_file=log_%date:~0,4%%date:~5,2%%date:~8,2%.txt
echo [%date% %time%] スクリプト開始 >> %log_file%
echo [%date% %time%] 処理中... >> %log_file%
echo [%date% %time%] スクリプト終了 >> %log_file%
echo ログファイル %log_file% に記録しました
pause
よくあるミスと解決方法
ミス1:スペースが原因のエラー
間違った書き方:
set name = 田中 ← スペースがあるとエラー
正しい書き方:
set name=田中 ← スペースなし
ミス2:変数が空のときの比較エラー
問題のあるコード:
if %var%==test echo OK ← 変数が空だとエラー
安全なコード:
if "%var%"=="test" echo OK ← ""で囲むと安全
ミス3:for文での%の数
バッチファイル内:
for %%i in (1 2 3) do echo %%i ← %%を使う
コマンドプロンプト:
for %i in (1 2 3) do echo %i ← %を使う
まとめ
バッチファイルでの変数の使い方をマスターすれば、より柔軟で実用的なスクリプトが作れるようになります。
覚えておきたいポイント
基本操作
- 変数の設定:
set 変数名=値
- 変数の使用:
%変数名%
- ユーザー入力:
set /p 変数名=メッセージ
- 計算:
set /a 変数名=式
注意点
- =の前後にスペースを入れない
- 比較するときは””で囲む
- for文では%%を使う(バッチファイル内)
実用テクニック
- 特殊変数(%date%、%time%など)を活用
- コマンドライン引数(%1、%2など)を使う
- 条件分岐や繰り返し処理と組み合わせる
コメント