山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他概要
このページは、Windowsのバッチファイルの変数について記述します。 使える変数は3種類がある。
種類 | 記述方法 | 概要 |
---|---|---|
バッチファイルの引数 | 各引数は%0~%9 全引数は%* |
読み取り専用 9個以上の引数を扱う場合はshift文でずらして使用する |
環境変数 | %変数名% | あらかじめシステムで登録されているもの他、自分で定義可能 |
for文の変数 | コマンドプロンプトでは%変数名 バッチファイルでは%%変数名 |
変数名は英字1文字のみでなければならない |
環境変数内の文字列の部分取得
rem 01234567890123456 rem 65432109876543210 set test=01234567890ABCDEF上記の様に環境変数testを設定した場合の部分取得例を以下に示します。
書式 | 記述例 取得結果 |
---|---|
%変数名:~先頭からの開始位置% | %test:~3% 34567890ABCDEF |
%変数名:~先頭からの開始位置,文字数% | %test:~3,2% 34 |
%変数名:~先頭からの開始位置,-末尾からの文字位置% | %test:~3,-4% 34567890AB |
%変数名:~-末尾からの開始位置% | %test:~-5,2% BC |
%変数名:~-末尾からの開始位置,-末尾からの文字位置% | %test:~-5,-1% BCDE |
環境変数内の文字の置き換え
環境変数の文字を置き換えるには以下の様に記述します。
%環境変数:A=B%
例えば以下のバッチファイルを実行すると環境変数tempのCがcに置換される
d:¥bat¥mod¥rep.bat
%環境変数:A=B%
例えば以下のバッチファイルを実行すると環境変数tempのCがcに置換される
d:¥bat¥mod¥rep.bat
set test=ABCDEFG echo %test:C=c% pause実行結果
D:¥bat¥mod>set test=ABCDEFG D:¥bat¥mod>echo ABcDEFG ABcDEFG D:¥bat¥mod>pause 続行するには何かキーを押してください . . .
環境変数の修飾子
引数およびfor文の変数に対して修飾子をつけることができます。
%~fn
例えば以下のバッチファイルを実行するとfullpass.batのフルパス名が表示される
d:¥bat¥mod¥fullpass.bat
%~pn
例えば以下のバッチファイルを実行するとpass.batのパスだけが表示される
d:¥bat¥mod¥pass.bat
%~dn
例えば以下のバッチファイルを実行するとdrive.batのドライブ文字が表示される
d:¥bat¥mod¥drive.bat
%~ni
例えば以下のバッチファイルを実行するとfile.batのファイル名が表示される
d:¥bat¥mod¥file.bat
%~pn
例えば以下のバッチファイルを実行するとext.batの拡張子が表示される
d:¥bat¥mod¥ext.bat
※nは変数の番号を示す
修飾子は複数を同時に指定できる。
例えば%dpnと指定するとドライブ名とパス名であるD:¥bat¥mod¥に変換される。
フルパスに展開
環境変数をフルパス名に変換するには(変数番号がnの時)以下の様に記述します。%~fn
例えば以下のバッチファイルを実行するとfullpass.batのフルパス名が表示される
d:¥bat¥mod¥fullpass.bat
echo %~f0 pause実行結果
D:¥bat¥mod>echo D:¥bat¥mod¥fullpass.bat D:¥bat¥mod¥fullpass.bat D:¥bat¥mod>pause 続行するには何かキーを押してください . . .
パスだけに展開
環境変数をパスだけに変換するには(変数番号がnの時)以下の様に記述します。%~pn
例えば以下のバッチファイルを実行するとpass.batのパスだけが表示される
d:¥bat¥mod¥pass.bat
echo %~p0 pause実行結果
D:¥bat¥mod>echo ¥bat¥mod¥ ¥bat¥mod¥ D:¥bat¥mod>pause 続行するには何かキーを押してください . . .
ドライブ文字に展開
環境変数をドライブ文字に変換するには(変数番号がnの時)以下の様に記述します。%~dn
例えば以下のバッチファイルを実行するとdrive.batのドライブ文字が表示される
d:¥bat¥mod¥drive.bat
echo %~d0 pause実行結果
D:¥bat¥mod>echo D: D: D:¥bat¥mod>pause 続行するには何かキーを押してください . . .
ファイル名に展開
環境変数をファイル名に変換するには(変数番号がiの時)以下の様に記述します。%~ni
例えば以下のバッチファイルを実行するとfile.batのファイル名が表示される
d:¥bat¥mod¥file.bat
echo %~n0 pause実行結果
D:¥bat¥mod>echo file file D:¥bat¥mod>pause 続行するには何かキーを押してください . . .
拡張子に展開
環境変数を拡張子に変換するには(変数番号がnの時)以下の様に記述します。%~pn
例えば以下のバッチファイルを実行するとext.batの拡張子が表示される
d:¥bat¥mod¥ext.bat
echo %~x0 pause実行結果
D:¥bat¥mod>echo .bat .bat D:¥bat¥mod>pause 続行するには何かキーを押してください . . .
その他
変数%nには"D:¥bat¥mod¥all.bat"が格納されている場合の変換例を以下に示します。※nは変数の番号を示す
修飾子 | 変換名 | 変換例 |
---|---|---|
%~n | ダブルクォーテーションを削除 | D:¥bat¥mod¥all.bat |
%~fn | 完全修飾パス名(フルパス) | D:¥bat¥mod¥all.bat |
%~dn | ドライブ文字 | D: |
%~pn | パス(ファイル名を除く) | ¥bat¥mod¥ |
%~nn | ファイル名 | all |
%~xn | 拡張子 | .bat |
%~sn | 8.3形式でフルパス | D:¥bat¥mod¥all.bat |
%~an | ファイル属性 | --a------ |
%~tn | ファイル更新時の日付/時刻。 | 2015/12/29 21:32 |
%~zn | ファイルサイズ | 116 |
例えば%dpnと指定するとドライブ名とパス名であるD:¥bat¥mod¥に変換される。
変数の遅延展開
変数の参照方法には%変数名%と!変数名!がある。
例えば以下様なバッチファイルを実行すると、for文の中は6回のループとなるので、変数numは1~6まで変化しそうに見せますが、実行結果の通りechoの表示結果は0のままです。
変数numの展開が読み込み時のみ展開されていますので最初に代入した0から変わりません。
例えば以下様なバッチファイルを実行すると、for文の中は6回のループとなるので、変数numは1~6まで変化します。
通常の展開と違い参照のたびに展開されますのでループのたびに1ずつ加算されます。
遅延展開を使用するために、setlocal enabledelayedexpansionを宣言しています。
また参照時には!を使用しています。
通常の展開
バッチファイルの読み込み時のみ変数が展開されます。例えば以下様なバッチファイルを実行すると、for文の中は6回のループとなるので、変数numは1~6まで変化しそうに見せますが、実行結果の通りechoの表示結果は0のままです。
変数numの展開が読み込み時のみ展開されていますので最初に代入した0から変わりません。
@echo off set num=0 for %%A in (a b c d e f) do ( set /A num=%num%+1 echo %num% %%A ) pause出力結果
0 a 0 b 0 c 0 d 0 e 0 f 続行するには何かキーを押してください . . .
遅延展開
変数を参照するたびに展開されます。例えば以下様なバッチファイルを実行すると、for文の中は6回のループとなるので、変数numは1~6まで変化します。
通常の展開と違い参照のたびに展開されますのでループのたびに1ずつ加算されます。
遅延展開を使用するために、setlocal enabledelayedexpansionを宣言しています。
また参照時には!を使用しています。
@echo off setlocal enabledelayedexpansion set num=0 for %%A in (a b c d e f) do ( set /A num=!num!+1 echo !num! %%A ) pause
1 a 2 b 3 c 4 d 5 e 6 f 続行するには何かキーを押してください . . .
Copyright (C) 2012 山本ワールド All Rights Reserved.