今更ながら Windows のバッチファイル引数と変数についてまとめました。
バッチファイルの拡張子
引数の説明に入る前に、バッチファイルの拡張子について。
Windowsではバッチファイル用に次の2つの拡張子が用意されています。
- .BAT --- MS-DOS 時代からの伝統的な拡張子
- .CMD --- WindowsNT 系で使える拡張子
MS-DOSやMS-DOSから起動するWindows95/98/Me上では、後者の.CMD拡張子はバッチファイルとして実行できないので、MS-DOS環境でも実行したいバッチ処理は.BATを、NT環境専用のバッチ処理は.CMDをつけて使い分けます。
ただし、現時点(2016年)においてはMS-DOSやWindows95系は退役しているので、もはや意味のない使い分けになりました。好きなほうの拡張子を使えば良いです。あるいは、一時的な作業バッチと恒久的な作業バッチで拡張子を使い分ける運用をしても良いでしょう。
例: *.CMD
を一時作業用に割り当て、作業終了時に del *.CMD
で用済みファイルを片付ける。
コマンドライン引数
バッチファイルを次のように呼び出した場合
C> バッチファイル名 引数1 引数2 引数3
3つの引数はバッチファイル内で %1 %2 %3
として参照できます。%*
なら3つまとめて参照できます。
SHIFT [/n]
によりn番目以後の引数番号をずらせます。
@echo off
echo arg1: %1
echo arg2: %2
echo arg3: %3
echo arg*: %*
shift
echo arg1: %1
echo arg2: %2
echo arg3: %3
echo arg*: %*
C>argtest A B C
arg1: A
arg2: B
arg3: C
arg*: A B C
arg1: B
arg2: C
arg3:
arg*: A B C
引数をパス名として分解、加工する
引数の引用符を外したり、さらにファイル名としてフルパス展開やドライブ名や拡張子の各要素に分解したり、属性や更新時刻やファイルサイズに置換できます。詳しくは help for
で調べてください。
@echo off
echo arg1: %1
echo arg~1: %~1
echo arg~f1: %~f1
echo arg~d1: %~d1
echo arg~p1: %~p1
echo arg~n1: %~n1
echo arg~x1: %~x1
echo arg~a1: %~a1
echo arg~t1: %~t1
echo arg~z1: %~z1
C>argtest "argtest.bat"
arg1: "argtest.bat"
arg~1: argtest.bat
arg~f1: C:\Users\hkuno\mybin\argtest.bat
arg~d1: C:
arg~p1: \Users\hkuno\mybin\
arg~n1: argtest
arg~x1: .bat
arg~a1: --a--------
arg~t1: 2016/12/09 10:44
arg~z1: 260
対話入力
コマンドライン引数ではなく、バッチファイル実行中に対話入力したい場合は SET /P 環境変数=[プロンプト文字列]
でユーザ入力を環境変数に設定できます。
set /p ANS="input string:"
echo ANS: %ANS%
input string:hello
ANS: hello
文字列置換
引数を環境変数に代入すれば、文字列置換を行うことができます。
set /p ANS="input date:"
echo ANS : %ANS%
echo replace / to _ ANS: %ANS:/=_%
input date:2016/12/9
ANS : 2016/12/9
replace / to _ ANS: 2016_12_9
組み込み環境変数
バッチファイル内で参照できる組み込み環境変数にて、カレントディレクトリ名や日付時刻などが参照できます。
詳しくは help set
で調べてください。
%CD% - 現在のディレクトリ文字列に展開します。
%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。
%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。
%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します。
%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。
%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
展開します。
%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンド ライン
に展開します。
%HIGHESTNUMANODENUMBER%
- このコンピューター上の最大の NUMA ノード番号に展開します。
参照
Windowsのコマンドプロンプトから下記を実行する。
help set
help for
help if
help shift
help cmd
バッチファイルの引数や変数についての有用情報が各コマンドのhelpに分散しているので、気付いたものを随時このページにまとめていく。