Windowsバッチ 引数変数(バッチパラメータ)
引数変数(バッチパラメータ)
バッチファイルを実行する際に、引数を渡すことができるが、
渡された引数は順番に%1, %2, %3, …, %9の変数として受け取ることができる。
%0には、バッチファイル名が格納される。
rem test1.bat echo arg0: %0 echo arg1: %1 echo arg2: %2 echo arg3: %3 echo arg4: %4
> test1.bat aaa bbb ccc ddd
arg0: test1.bat arg1: aaa arg2: bbb arg3: ccc arg4: ddd
引数の区切り文字
バッチファイルの引数の区切り文字は、半角スペースだけではなく、次のようになっている。
- (半角スペース)
- ,(カンマ)
- ;(セミコロン)
- =(イコール)
従って、次のコマンドラインは、上の実行結果と変化しない。
> test1.bat aaa,bbb;ccc=ddd
arg0: test1.bat arg1: aaa arg2: bbb arg3: ccc arg4: ddd
区切り文字を含む文字列を引数として渡したい場合は、"(ダブルクォーテーション)で囲む。
次のコマンドラインは、上の実行結果から変化する。
> test1.bat "aaa,bbb;ccc=ddd"
arg0: test1.bat arg1: "aaa,bbb;ccc=ddd" arg2: arg3: arg4:
但し、この場合、"(ダブルクォーテーション)を含んだ文字列となるので注意。
これを避けるためには、引数の記述を %~n のようにする。
引数変数の解釈時変換
引数変数%nを次のようにすると、それぞれ変換された文字列を取得できる。
コマンドプロンプトで「call /?」を実行すると、これらについてのヘルプ情報を確認できる。
echo -------------------------- echo そのまま 1 : %1 echo 引用句 (") を削除 ~1 : %~1 echo 完全修飾パス名 ~f1: %~f1 echo ドライブ文字 ~d1: %~d1 echo パス ~p1: %~p1 echo ファイル名 ~n1: %~n1 echo ファイル拡張子 ~x1: %~x1 echo 短い名前 ~s1: %~s1 echo ファイル属性 ~a1: %~a1 echo ファイル日付時刻 ~t1: %~t1 echo ファイルサイズ ~z1: %~z1 (バイト) echo -------------------------- echo ドライブ文字+パス echo ~dp1: %~dp1 echo ファイル名+ファイル拡張子 echo ~nx1: %~nx1 echo ファイル属性+ファイル日付時刻+ファイルサイズ+完全修飾パス名 echo ~ftza1: %~ftza1 echo --------------------------
-------------------------- そのまま 1 : a1.txt 引用句 (") を削除 ~1 : a1.txt 完全修飾パス名 ~f1: C:\test\a1.txt ドライブ文字 ~d1: C: パス ~p1: \test\ ファイル名 ~n1: a1 ファイル拡張子 ~x1: .txt 短い名前 ~s1: C:\test\a1.txt ファイル属性 ~a1: --a-----l-- ファイル日付時刻 ~t1: 2020/05/06 11:29 ファイルサイズ ~z1: 24 (バイト) -------------------------- ドライブ文字+パス ~dp1: C:\test\ ファイル名+ファイル拡張子 ~nx1: a1.txt ファイル属性+ファイル日付時刻+ファイルサイズ+完全修飾パス名 ~ftza1: --a-----l-- 2020/05/06 11:29 24 C:\test\a1.txt --------------------------
for %%a in (%*) do ()処理と、引数の数
引数変数をまとめた特殊な変数 %* を使ったfor文を使用すると、
引数変数を1つずつ取り出しながら繰り返し処理が可能。
但し、この方法は%0からではなく、%1からなので、注意すること。
これを使うと、バッチファイルの引数の数をカウントできる。
また、引数変数を%1~%9で扱う場合は9個までしか対応できないが、
この方法なら、10個以上の引数変数も扱うことが可能となる。
rem hikisuu.bat setlocal enabledelayedexpansion set /A n = 0 for %%a in (%*) do ( set /A n = !n! + 1 set arg[!n!]=%%a ) echo 引数の個数:%n%個 for /l %%m in (1, 1, %n%) do ( echo arg%%m : !arg[%%m]! )
> hikisuu.bat aaa bbb ccc
引数の個数:3個 arg1 : aaa arg2 : bbb arg3 : ccc