サイトアイコン スグブログ

【bat】バッチファイルで変数や環境変数の使い方!エラー対処法あり

バッチファイルで変数や環境変数を設定するやり方を教えます。

その他にも変数に関わる事をご紹介します。

この記事でわかる事
  • 変数を指定する時の注意点など
  • 計算結果を変数に代入するやり方
  • ユーザーが入力したものを変数に入れるやり方
  • 初期から入っている便利な環境変数などもご紹介!
  • 変数値の一部を置き換えする方法
  • 変数値の一部の文字列を切り出しする方法

上記の事を現役エンジニアの筆者が詳しくお伝えします!

windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。

全てに実例バッチファイルも用意して、実行結果を載せているのでわかりやすいです。

バッチファイルで変数や環境変数を設定する方法

変数や環境変数を設定する基礎

バッチファイルで変数を設定するやり方の基礎は以下です。

set 変数名=変数の値

変数に入れた値を展開するには、以下のように変数名を「%」で囲って記述します。

%変数名%

変数に値を入れて表示する例文ファイルの説明

では変数に文字を入れて、変数の展開を実際に行ってみます。以下のバッチファイルを作成してください。

@echo off

set hensu=変数の文字
echo %hensu%

pause

最初に「@echo off」でbatのコマンドを非表示にしています。

「hensu」という変数を作成して「変数の文字」という文字を入れてみました。

変数を%で囲い展開したものをechoコマンドで表示しています。

最後にpauseで一時停止しています。

変数に値を入れて表示する例文ファイルの実行結果

このバッチファイルを実行して見ます。

変数の文字

変数に入れた文字がきちんと表示されています。

変数に値を入れて表示する時のエラーなど

この時にエラーが出たり思い通りの結果にならなかった場合もあると思います。

バッチファイルで変数に値を入れて表示する時のエラー例まとめ
  • 文字を「”」で囲っている
  • =の前後に空白が入っている

それそれエラーなどの例を見ていきます。

エラー1:文字を”で囲う

@echo off

set hensu="変数の文字"
echo %hensu%

pause

スクリプトでは文字列を「”」などで囲う事がありますが、バッチファイルでは囲う必要はありません。

このバッチファイルを実行してみます。

"変数の文字"

「”」までが表示されています。本来であれば変数の文字だけを表示したいので思い通りの結果ではありません。

バッチファイルで変数に文字列を入れたい時に「”」で囲う必要はありません。

エラー2:=の前後に空白が入っている

@echo off

set hensu = 変数の文字
echo %hensu%

pause

スクリプトでは変数に文字列を入れる時の=の前後に空白があっても良いですが、バッチファイルでは=の前後に空白があればエラーとなります。

このバッチファイルを実行してみます。

ECHO は <OFF> です。
続行するには何かキーを押してください . . .

変数に文字列が入っていない為、うまく表示されていません。

バッチファイルで変数に文字列を入れたい時に「=」の前後に空白は入れてはいけません。

バッチファイルの変数で思い通りにの結果にならない時は、「=」の前後を確認してください。

エラーバッチファイル2の補足

補足として「=」の前だけに空白を入れた場合

@echo off

set hensu =変数の文字
echo %hensu%

pause

このバッチファイルを実行してみます。

ECHO は <OFF> です。
続行するには何かキーを押してください . . .

同じ結果でエラーになっています。

補足として「=」の後だけに空白を入れた場合

@echo off

set hensu= 変数の文字
echo %hensu%

pause

このバッチファイルを実行してみます。

 変数の文字

成功しているように見えますが、「変数の文字」の前にスペースが入っています。

「=」の後だけに空白を入れた場合も、思い通りの結果となっていません。

バッチファイルで変数に計算結果を代入する方法

変数に計算結果を代入する基礎

バッチファイルで変数に文字列を入れる方法はわかりました。

では変数に数式の結果を入れる事はできるのでしょうか?

結論はできます。バッチファイルで変数に計算結果を代入する方法の基礎は以下となります。

set /a 変数名=計算式

「/a」オプションをつけると計算結果を代入する事が可能です。

以下のバッチファイルを作成してください。

@echo off

set /a keisankekka=2+3
echo %keisankekka%

pause

「set /a」で「keisankekka」に計算結果を代入しています。実行してみます。

5

計算結果が変数に代入されて表示されています。

簡単に変数の値を更に計算していく

変数に計算結果を入れて、その値を使用して更に計算していく方法は以下です。

@echo off

set /a keisankekka=2+3
set /a keisankekka=%keisankekka%+3
echo %keisankekka%

pause

これではややこしくて汚いコマンドですね。これを以下のように修正します。

@echo off

set /a keisankekka=2+3
set /a keisankekka+=3
echo %keisankekka%

pause

「=」の前に演算子を付ける事で、簡単に変数の値をどんどん計算していく事が可能です。

バッチファイルで変数にユーザーが入力したものを代入する方法

変数にユーザーが入力したものを代入する基礎

ユーザーが入力したものを変数に入れたい場合もありますよね。

そういった場合は「/p」オプションをつけると簡単にできます。

set /p 変数名=表示するメッセージ

変数にユーザーが入力したものを代入する例文

では以下のバッチファイルを作成してください

@echo off

set /p hensu=文字を入力してください:
echo %hensu%

pause

このバッチファイルを実行してみます。

文字を入力してください:

表示するメッセージの文字列が表示され、ユーザーの入力待ちになります。そこで何か文字を入力します。

文字を入力してください:ユーザーが入力した文字

「ユーザーが入力した文字」と入力してエンターを押します。

文字を入力してください:ユーザーが入力した文字
ユーザーが入力した文字

ユーザーが入力した文字が表示されました。

バッチファイルで変数や環境変数を表示して確認する方法

変数や環境変数を表示する基礎

設定されている環境変数や指定した変数全てを表示して、確認する方法は以下のコマンドです。

set

単体で変数や環境変数を確認するには「set」の後に変数名を記述します。

set 変数名または環境変数名

元から代入されている便利な環境変数

元から代入されている便利な環境変数もあります。以下にまとめます。

便利な環境変数代入されている値
%CD%カレントディレクトリのパス
%TIME%現在の時間
%DATE%現在の年月日
%RANDOM%0から32767までの乱数字
%ERRORLEVEL%直前のコマンド結果に紐づいた値
バッチファイルで元から入っている便利な環境変数一覧

カレントディレクトリのパスが入っている環境変数

「%CD%」を指定してみます。以下のバッチファイルを作成してください。

@echo off

echo %CD%

pause

バッチファイルが入っているパスが「%CD%」に入っています。これを「echo」コマンドで表示しています。

このバッチファイルを実行してみます。

C:\script\bat\14_変数

バッチファイルのあるパスは以下のCドライブの配下の「script/bat/14_変数」にあります。

バッチファイルのhensu.batのパス

このパスがきちんと表示されています。

現在の時間が入っている環境変数

「%TIME%」を指定してみます。以下のバッチファイルを作成してください。

@echo off

echo %TIME%

pause

現在の時間が「%TIME%」に入っています。これを「echo」コマンドで表示しています。

このバッチファイルを実行してみます。

18:39:49.71

現在の時刻が表示されました。

現在の日にちが入っている環境変数

「%DATE%」を指定してみます。以下のバッチファイルを作成してください。

@echo off

echo %DATE%

pause

現在の日付が「%DATE%」に入っています。これを「echo」コマンドで表示しています。

このバッチファイルを実行してみます。

2023/10/29

現在の日付が表示されました。

DATEやTIMEを使用してログファイルやディレクトリを作成する方法は以下の記事でまとめています。

ランダムな数字が入る環境変数

「%RANDOM%」を指定してみます。以下のバッチファイルを作成してください。

@echo off

echo %RANDOM%

pause

0から32767までの数字がランダムに「%RANDOM%」変数に入ります。これを「echo」コマンドで表示しています。

このバッチファイルを実行してみます。

19541

ランダムな数字が表示されました。

直前のコマンド結果に紐づいた値が入る環境変数

「%ERRORLEVEL%」を指定してみます。以下のバッチファイルを作成してください。

@echo off

echo %ERRORLEVEL%

pause

直前のコマンド結果に紐づいた値が「%ERRORLEVEL%」変数に入ります。これを「echo」コマンドで表示しています。

直前のコマンド結果に紐づいた値の基本を以下のテーブルにまとめておきます。

ERRORLEVEL直前のコマンド結果に紐づいた値
コマンド成功、初期値0
コマンド失敗1
コマンド自体がない9009
バッチファイルの基本的なERRORLEVELの値

このバッチファイルを実行してみます。

0

初期値の0が表示されました。

ERRORLEVELに関しては他のifコマンドやchoiceコマンドと併用して、実務でも使用できるバッチファイルを作成したりできますが、今回の変数とは関係ないので割愛します。

気になる方はERRORLEVELに関しての詳しい内容を、以下の記事にまとめていますのでこちらからどうぞ

バッチファイルで変数や環境変数の値を置き換えする方法

変数や環境変数の値を置き換えする基礎構文

バッチファイルで変数や環境変数の値を、置き換えする方法の基礎は以下です。

set 変数名=%変数名:変更前の文字=変更後の文字%

ややこしいですが「変数名:」「置き換え前=置き換え後」を指定する。その後%で囲むそれを変数に代入すると考えるとわかりやすいです。

変数や環境変数の値を置き換えする例文

変数や環境変数の値を置き換えする

以下のバッチファイルを作成してください。

@echo off

set test=C:\test\
set test

set test=%test:C:=D:%
set test

pause

「test」という変数に「C:\test\」というパスを代入しました。test変数を確認しています。

「set test=%test:C:=D:%」コマンドでCドライブをDドライブに変更しています。再度test変数を確認しています。

このバッチファイルを実行してみます。

test=C:\test\
test=D:\test\

CがDに変更している事がわかります。

変数や環境変数の値を一部削除する

以下のバッチファイルを作成してください。

@echo off

set test=C:\test\
set test
set test=%test:C:=%
set test

pause

「test」という変数に「C:\test\」というパスを代入するところまでは先程と同じです。test変数を確認しています。

「set test=%test:C:=%」コマンドで「C:」を空白に変更しています。再度test変数を確認しています。

このバッチファイルを実行してみます。

test=C:\test\
test=\test\

C:が空白になり削除されている事がわかります。

指定する時に*(アスタリスク)も使用できます。

以下のバッチファイルを作成してください。

@echo off

set test=C:\test\
set test
set test=%test:*st=east%
set test

pause

「test」という変数に「C:\test\」というパスを代入するところまでは先程と同じです。test変数を確認しています。

「set test=%test:*st\=east%」コマンドで「st\」までの文字を「east」に変更しています。再度test変数を確認しています。

このバッチファイルを実行してみます。

test=\test\
test=east

「st\」までの文字が全てが「east」に変更された事がわかります。

バッチファイルで変数や環境変数の値から文字列を切り出しする方法

変数や環境変数の値から文字列を切り出しする基礎構文

バッチファイルで変数や環境変数の値から、一部を取得する方法の基礎は以下です。

set 変数名=%変数名:~取得開始ずらす,範囲を指定(省略可能)%

前工程の置き換えと同じ考えで「変数名:」に「取得開始ずらす,範囲」を指定する。その後%で囲む。それを変数に代入すると考えるとわかりやすいです。

※取得開始位置は「~」を付けるのを忘れない事

変数や環境変数の値から一部を取得する例文

変数の先頭を6ずらして2つ文字を取得する

@echo off

set test=123456789
set test=%test:~6,2%
echo %test%

pause

test変数に「123456789」を代入しています。

「set test=%test:~6,2%」で開始位置を6ずらして、そこから2文字を取得するようなコマンドです。

78

最初の「1」か6ずらして2文字なので、「78」の文字が表示されている事がわかります。

変数の先頭を6ずらして全ての文字を取得する

@echo off

set test=123456789
set test=%test:~6%
echo %test%

pause

再程と同じでtest変数に「123456789」を代入しています。

「set test=%test:~6%」で開始位置を6ずらして、範囲は省略しているパターンです。

789

最初の「1」か6ずらして最後の文字までなので、「789」の文字が表示されている事がわかります。

変数の末尾7番目から全ての文字を取得する

@echo off

set test=123456789
set test=%test:~-7%
echo %test%

pause

再程と同じでtest変数に「123456789」を代入しています。

開始位置を末尾から指定する場合は「-」をつければOKです。

「set test=%test:~-7%」で末尾から開始位置を7ずらして、範囲は省略しているパターンです。

3456789

末尾から7ずらして最後の文字までなので、「3456789」の文字が表示されている事がわかります。

変数の先頭を2ずらして末尾5番目までを除く文字を取得する

@echo off

set test=123456789
set test=%test:~2,-5%
echo %test%

pause

再程と同じでtest変数に「123456789」を代入しています。

範囲指定で「-」を付けた場合は、その数字だけ省くことになります。

「set test=%test:2,-5%」で先頭から2ずらして、末尾から5番目までの文字を省いた文字列を取得します。

34

先頭から2すらして末尾から5文字を省いた文字列を表示しているので、「34」の文字が表示されている事がわかります。

このように変数の文字列から一部を切り出しする事も可能です。

変数や環境変数の値から一部を取得する時のエラーと解決法

バッチファイルで変数や環境変数の値から一部を取得する時に、上手くいかない時の見る所はやはりココ

下のバッチファイルを作成してください。

@echo off

set test=123456789
set test=%test:2,-5%
echo %test%

pause

再程と同じでtest変数に「123456789」を代入しています。

「set test=%test:2,-5%」で先頭から2ずらして、末尾から5番目までの文字を省いた文字列を取得しようとしています。

test:2,-5

変数に指定した文字で「%」が省かれた文字列が表示されており、想定通りの結果ではありません。

バッチファイル失敗の原因は、開始位置指定の時の「~」を忘れている事になります。

開始位置にはしっかり「~」をつけましょう。

【bat】バッチファイルでの変数や環境変数の扱い方のまとめ

変数や環境変数を設定する基礎

バッチファイルで変数を設定するやり方の基礎は以下です。

set 変数名=変数の値

変数に入れた値を展開するには、以下のように変数名を「%」で囲って記述します。

%変数名%

変数に値を入れて表示する時のエラーなど

バッチファイルの変数でエラーが出たり思い通りの結果にならなかった場合に見る場所

バッチファイルで変数に値を入れて表示する時のエラー例まとめ
  • 文字を「”」で囲っている
  • =の前後に空白が入っている

変数に計算結果を代入する基礎

バッチファイルで変数に計算結果を代入する方法の基礎は以下となります。

set /a 変数名=計算式

「/a」オプションをつけると計算結果を代入する事が可能です。

「=」の前に演算子を付ける事で、簡単に変数の値をどんどん計算していく事が可能。

変数にユーザーが入力したものを代入する基礎

ユーザーが入力したものを変数に入れたい場合「/p」オプションをつけると簡単にできます。

set /p 変数名=表示するメッセージ

変数や環境変数を表示する基礎

設定されている環境変数や指定した変数全てを表示して、確認する方法は以下のコマンドです。

set

単体で変数や環境変数を確認するには「set」の後に変数名を記述します。

set 変数名または環境変数名

元から代入されている便利な環境変数

元から代入されている便利な環境変数もあります。以下にまとめます。

便利な環境変数代入されている値
%CD%カレントディレクトリのパス
%TIME%現在の時間
%DATE%現在の年月日
%RANDOM%0から32767までの乱数字
%ERRORLEVEL%直前のコマンド結果に紐づいた値
バッチファイルで元から入っている便利な環境変数一覧

変数や環境変数の値を置き換えする基礎構文

バッチファイルで変数や環境変数の値を、置き換えする方法の基礎は以下です。

set 変数名=%変数名:変更前の文字=変更後の文字%

「変数名:」「置き換え前=置き換え後」を指定する。その後%で囲むそれを変数に代入すると考えるとわかりやすい。

変数や環境変数の値から一部を取得する基礎構文

バッチファイルで変数や環境変数の値から、一部を取得する方法の基礎は以下です。

set 変数名=%変数名:~取得開始ずらす,範囲を指定(省略可能)%

「変数名:」に「取得開始ずらす,範囲」を指定する。その後%で囲む。それを変数に代入すると考えるとわかりやすい。

変数や環境変数の値から一部を取得する時のエラーと解決法

バッチファイルで変数や環境変数の値から一部を取得する時に、上手くいかない時の見る所は、取得開始位置で「~」を付けるのを忘れない事

モバイルバージョンを終了