【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

C:\sample\bat>

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

 

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

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

C:\sample\bat>

 

 

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

「複数引数を渡すときはスペースを使う」と説明しましたが、その場合そのままの状態では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"

C:\sample\bat>

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

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

「%~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

C:\sample\bat>

 

 

基本渡せる引数の個数は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
C:\sample\bat>

「%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で取得できています。

 

以上です。



投稿日:2020-07-10    更新日:2020-07-10

[スポンサーリンク]

サイト内検索
プロフィール

プロフィール

[Name : じゃぶじゃぶ(@jbjb_2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

[スポンサードリンク]