Windowsバッチ

【bat】Windowsバッチ実行時に引数を渡す方法

バッチファイル実行時に引数を渡すためには、実行するバッチファイルの後にスペースなどを付けて引数を設定することとが可能です。

引数を渡し方

引数を渡す方法

構文
 [バッチファイル名(.bat)] [引数]
例
 sample1-2.bat 100

複数の引数を設定するには、引数の間を以下の文字で繋げて書くことで可能です。

引数設定

  • スペース
  • イコール
  • カンマ
  • セミコロン

 

・例)

[スペースで複数の引数を設定]
 sample1-2.bat 100 TEST hoge 5

[イコールで複数の引数を設定]
 sample1-2.bat 100=TEST=hoge=5

[カンマで複数の引数を設定]
 sample1-2.bat 100,TEST,hoge,5

[セミコロンで複数の引数を設定]
 sample1-2.bat 100;TEST;hoge;5

渡した引数を受け取る

引数を受け取るには「%[引数に設置した左からの順番]」で取得できます。

sample1-2.bat

@echo off
echo %0
echo %1
echo %2
echo %3

結果

C:\sample\bat> sample1-2.bat 100 test 5
sample1-2.bat
100
test
5

「%0」は実行したバッチファイルのファイル名が格納されています。それ以降「%1~3」には引数が左から順番に渡されていることが分かる思います。

ちなみに、引数を何も渡さないと以下のように返ってきます。

C:\sample\bat> sample1-2.bat
sample1-2.bat
ECHO は <OFF> です。
ECHO は <OFF> です。
ECHO は <OFF> です。

 

 

スペースを含む文字列を引数に渡す

「複数引数を渡すときはスペースを使う」と説明しましたが、その場合そのままの状態では1つの引数にスペースを含む文字列を渡すことができないこと気にづきます。

他にも「1+1=2」のようにイコールを含む際は、「1+1」と「2」が別の引数として渡されてしまいます。

こういったケースでの対処法として、引数をダブルクォーテーション(")で囲むというやり方があります。

C:\sample\bat> sample1-2.bat "sample test" 100 "1+1=2"
sample1-2.bat
"sample test"
100
"1+1=2"

しかしこのままだと受け取った引数にダブルクォーテーションも一緒に取得され、実際に使う際はダブルクォーテーションをエスケープしなければならず非常に面倒です。

そんな時便利なのが「%~[引数の番号]」です。

「%~1」とすることで、引数の最初と最後のダブルクォーテーションを削除した値を取得することが可能です。

sample1-3.bat

@echo off
echo %0
echo ----------
echo %1
echo %~1
echo ----------
echo %2
echo %~2
echo ----------
echo %3
echo %~3

結果

C:\sample\bat>sample1-3.bat "sample test" 100 "1+1=2"
sample1-3.bat
----------
"sample test"
sample test
----------
100
100
----------
"1+1=2"
1+1=2

基本渡せる引数の個数は10個

Windowsバッチに渡せる引数は一度に10個までです。

sample1-4.bat

@echo off
echo %0
echo %1
echo %10
echo %1%0
echo %11
echo %12

結果

C:\sample\bat> sample1-4.bat a b c d e f g h i 10
sample1-4.bat
a
a0
asample1-4.bat
a1
a2

「%10」とした場合は引数「%1」と数字「0」の組み合わせとして判断されてしまいます。

「%1%0」とした場合は引数「%1」と引数「%0」が結合されて表示されます。

「%11 = %1(a)と1」、「%12 = %1(a)と2」となっているのが分かるかと思います。

 

解決策としては、「shift」コマンドを利用します。

sample1-5.bat

@echo off
echo 初回-----------
echo %0
echo %1
echo %2
echo %3
echo %7
echo %8
echo %9
echo shift1回目-----------
shift
echo %0
echo %1
echo %2
echo %3
echo %7
echo %8
echo %9
echo shift2回目-----------
shift
echo %0
echo %1
echo %2
echo %3
echo %7
echo %8
echo %9

結果

C:\sample\bat> sample1-5.bat a b c d e f g h i 10
初回-----------
sample1-5.bat
a
b
c
g
h
i
shift1回目-----------
a
b
c
d
h
i
10
shift2回目-----------
b
c
d
e
i
10
ECHO は <OFF> です。

「shift」コマンドを使うことで、引数が1つ左に入れ替わっていることが分かるかと思います。

%1→%0になり、%2→%1になります。

今まで取得できていなかった10番目の引数「10」の値が、「shift」コマンドで%9で取得できています。

 

以上です。

-Windowsバッチ