Windowsバッチファイルの変数の使い方|初心者向け完全ガイド

Windows

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など)を使う
  • 条件分岐や繰り返し処理と組み合わせる

コメント

タイトルとURLをコピーしました