Windowsバッチファイル引数

Windowsバッチファイルの引数

引数の渡し方

バッチファイルでは、コマンドオプションのように引数を渡すことが出来ます。


> args_handle.bat arg1 arg2 arg3

渡された引数は「%1 から %9までの変数」として保存されます。

なお、「%0」は実行中のバッチファイル名が保存されます。


@echo 実行ファイル : %0
@echo 引数1       : %1
@echo 引数2       : %2
@echo 引数3       : %3

バッチファイルで10個以上の引数を渡す場合。

バッチファイルで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

バッチファイルにおける引数の数

バッチファイルでは「引数の数」という情報を持つ変数などはありません。

一定数の引数を要求する場合には、下記のように値があるかないか確認することで処理を実現できます。


if "%~2"=="" (
  echo ERROR: Too few arguments.
  echo USAGE: %~0 ip-addr username password
  exit /b 1
)

if not "%~3"=="" (
  echo ERROR: Too much arguments.
  echo USAGE: %~0 ip-addr username password
  exit /b 1
)

バッチパラメータ・修飾子

バッチファイルでは、バッチパラメータと呼ばれる変数を利用する事ができます。

「%~」構文は「%変数」を様々な情報に展開します。


以下はバッチファイル実行時に付加された最初のパラメータ(第一引数)である「%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を展開する。環境変数名が定義されていない場合、また検索してもファイルが見つからなかった 場合は、この修飾子を指定すると空の文字列に展開する。

関連ページ