バッチファイルでは、コマンドオプションのように引数を渡すことが出来ます。
> args_handle.bat arg1 arg2 arg3
渡された引数は「%1 から %9までの変数」として保存されます。
なお、「%0」は実行中のバッチファイル名が保存されます。
@echo 実行ファイル : %0 @echo 引数1 : %1 @echo 引数2 : %2 @echo 引数3 : %3
バッチファイルで9個を越える引数を利用する場合は「shiftコマンド」を使用します。
shiftコマンドは、各パラメータを直前のパラメータにコピーするコマンドです。
なお、実行前に%0に格納されていた値は消えて二度と戻すことはできませんので、変数に格納するなどの対応が必要になります。
> type args_handle.bat @echo args : %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 set cmdname=%0 shift @echo args : %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 > args_handle.bat a b c d e f g h i j k l m n args : args_handle.bat a b c d e f g h i args : a b c d e f g h i j
shiftコマンドは、指定された部分以降だけを左へずらす機能も持っています。
例えば、実行ファイル名は「%0」で参照できる状態のままで、引数部分の「%1」以降をずらしたい場合は次のようにします。
shift /1 > type args_handle.bat @echo args : %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 shift /1 @echo args : %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 > args_handle.bat a b c d e f g h i j k l m n args : args_handle.bat a b c d e f g h i args : args_handle.bat b c d e f g h i j
バッチファイルにおける引数の区切り文字は以下の通りです。
引数の区切り文字がスペースだけでないため、区切り文字の扱いには注意が必要です。
> type args_handle.bat @echo args : %1 %2 %3 %4 %5 > args_handle.bat aaa=bbb,ccc ddd;eee args: aaa bbb ccc ddd eee
等式やカンマを単一引数(文字列)として扱うにはダブルクォーテーションで囲みます。
> type args_handle.bat @echo arg1 : %1 @echo arg2 : %2 > args_handle.bat "aaa=bbb,ccc" "ddd;eee" arg1 : "aaa=bbb,ccc" arg2 : "ddd;eee"
ただし、引数をダブルクォーテーションで囲んで指定すると、受け取り側であるバッチファイルではダブルクォーテーションを含んだ文字列として認識されます。
バッチファイルの引数からダブルクォーテーションを取り除くには、引数の記述を「%~n」という形式にします。。
> type args_handle.bat @echo arg1 : %~1 @echo arg2 : %~2 > args_handle.bat "aaa=bbb,ccc" "ddd=eee" arg1 : aaa=bbb,ccc arg2 : ddd=eee
バッチファイルでは、バッチパラメータと呼ばれる変数を利用する事ができます。
「%~」構文は「%変数」を様々な情報に展開します。
以下はバッチファイル実行時に付加された最初のパラメータ(第一引数)である「%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を展開する。環境変数名が定義されていない場合、また検索してもファイルが見つからなかった 場合は、この修飾子を指定すると空の文字列に展開する。 |