Windowsバッチファイル変数
コマンドプロンプト変数の宣言
変数の宣言方法
SETコマンドで変数(環境変数)の設定を行います。
変数名と「=」の間はスペースを入れず記述する必要があります。(空白を含んだ変数名が設定されてしまうため。)
SET 変数名=[文字列]
SET /A 変数名=[数式]
変数を参照する場合は、変数名を「%」で囲みます。
ECHO %変数名%
変数のローカル化(変数スコープを設定する)
変数のローカル化とは、setlocalからendlocalの範囲内で定義した変数がその中だけ有効となり、外部の同名の変数に影響を及ぼさないようにすることです。
指定 | 説明 |
---|---|
setlocal | バッチファイルでの環境変数の使用を開始する。 |
endlocal | バッチファイルでの環境変数の使用を終了する。 |
@echo off
setlocal
set num=1
echo %num%
endlocal
echo %num%
数値の表現
SETコマンドの「/A オプション」を用いることで変数に数値を代入することができます。
SET /A num=12345
SET /A num=0
SET /A num=2147483647
SET /A num=-2147483647
数値には16進数や8進数を指定することもできます。16進数は「0x」で始まり、8進数は「0」で始まります。
SET /A num=0x10
SET /A num=022
代入できるのは整数(32bit 値)のみであり、小数は代入することはできません。
以下の式はエラーとなります。
REM 32bitを超えた場合
REM エラーメッセージは「無効な数字です。数値は 32 ビットで表記される数値です。」
SET /A num=2147483648
REM 小数の場合
REM エラーメッセージは「演算子がありません。」
SET /A num=1.23
文字列の表現
SETコマンドを用いることで変数に文字列を代入することができます。
文字列には引用符(ダブルクォーテーション等)を指定する必要はありません。
なお、「=」の後の空白も文字列として処理されます。
SET str1=aaa
SET str2= bbb
REM 以下は文字列を結合させて「aaa bbb」を定義します。
SET str3=%str1%%str2%
データ型について
コマンドプロンプトで配列やハッシュ変数はサポートされていません。
Windowsバッチファイルにおける遅延環境変数の展開
環境変数の展開方法には「%変数%」と「!変数!」の二通りがあります。「%」は構文解析時に環境変数の展開を行い、「!」はコマンド実行の直前に(つまり遅延して)環境変数の展開を行います。
例えば、以下のスクリプトを実行します。
@echo off
setlocal
set OSINFO="MacOSX"
if %OSINFO% == "MacOSX" (
set OSINFO="unix"
echo %OSINFO%
)
endlocal
構文解析時に環境変数を展開するため、実行結果は「MacOSX」となります。
そこで、「enabledelayedexpansion」を用いて遅延環境変数を有効にして、変数名を「!」で囲みます。
@echo off
setlocal enabledelayedexpansion
set OSINFO="MacOSX"
if %OSINFO% == "MacOSX" (
set OSINFO="unix"
echo !OSINFO!
)
endlocal
コマンド実行時に環境変数を展開するため、実行結果は「unix」となります。
Windowsバッチファイルの引数
バッチファイルでは、コマンドオプションのように引数を渡すことが出来ます。渡された引数は「%1 から %9までの変数」として保存されます。 「%0」は実行中のバッチファイル名が保存されます。
詳細はWindowsバッチファイル - 引数を参照してください。
バッチパラメータ・修飾子
バッチファイルでは、バッチパラメータと呼ばれる変数を利用する事ができます。
「%~」構文は「%変数」を様々な情報に展開します。
以下はバッチファイル実行時に付加された最初のパラメータ(第一引数)である「%1」を「%~」構文に従って展開した例です。
指定 | 説明 |
---|---|
%~1 | 全ての引用句(")を削除して%1を展開する。 |
%~f1 | %1を完全修飾パス名に展開する。 |
%~d1 | %1をドライブ名だけに展開する。 |
%~p1 | %1をパスだけに展開する。 |
%~n1 | %1をファイル名だけに展開する。 |
%~x1 | %1をファイル拡張子だけに展開する。 |
%~s1 | 展開されたパスはMS-DOSの「8.3形式」でも短い名前だけを含む。 |
%~a1 | %1をファイル属性に展開する。 |
%~t1 | %1をファイルの日付・時刻に展開する。 |
%~z1 | %1をファイルのサイズに展開する。 |
%~$PATH:1 | PATH環境に指定されているディレクトリを検索し、最初に見つかった完全修飾名 に%1を展開する。環境変数名が定義されていない場合、また検索してもファイルが見つからなかった 場合は、この修飾子を指定すると空の文字列に展開する。 |
動的な環境変数
コマンド拡張機能が有効な場合、実行時に動的に値が計算される環境変数があります。
指定 | 説明 |
---|---|
%CD% | 現在のディレクトリ文字列に展開します。 |
%DATE% | DATEコマンドと同じフォーマットで現在の日付に展開します。 |
%TIME% | TIMEコマンドと同じフォーマットで現在の時刻に展開します。 |
%RANDOM% | 0 から 32767 の間の任意の 10 進数に展開します。 |
%ERRORLEVEL% | 現在の ERRORLEVEL の値に展開します。 |
%CMDEXTVERSION% | 現在のコマンド プロセッサ拡張機能のバージョン番号に展開します。 |
%CMDCMDLINE% | コマンド プロセッサを起動したオリジナル コマンド ラインに展開します。 |
%HIGHESTNUMANODENUMBER% | コンピューター上の最大NUMAノード番号に展開します。 |
関連ページ
- Windowsバッチファイル - 作成と実行
- Windowsバッチファイル - 引数
- Windowsバッチファイル - 特殊な文法
- Windowsバッチファイル - 変数
- Windowsバッチファイル - 演算子
- Windowsバッチファイル - 制御構文
- Windowsバッチファイル - 外部ファイルの読み書き
- Windowsバッチファイル - 実行結果の取得