目次
「shift」コマンドの使い方
「shift」コマンドは、指定した引数を一つ番号の小さい方へずらすコマンドです。10個以上の引数を指定したとき、10番目以降の引数を参照するときによく用いられます。バッチファイルに引数を指定して実行するとき、以下のように指定します。
1 |
[バッチファイル名] [引数1] [引数2] [引数3]... |
このとき、バッチファイル内でこれらの引数を参照するときは、「%1」、「%2」、…を使用します。引数との対応は、
%1 → 引数1
%2 → 引数2
%3 → 引数3
…
となります。
以下に、引数を参照したバッチファイルの例(arg_noshift.bat)を示します。
1 2 3 4 5 6 |
@echo off rem 引数を確認 echo 第1引数には「%1」が指定されています。 echo 第2引数には「%2」が指定されています。 echo 第3引数には「%3」が指定されています。 |
以下に引数を指定して実行した例を示します。
1 |
arg_noshift.bat arg1 arg2 arg3 arg4 arg5 |
次に、引数の確認前に「shift」コマンドを一回実行するバッチファイル(arg_shift1.bat)を示します。
1 2 3 4 5 6 7 8 9 |
@echo off rem 「shift」コマンドを1回実行 shift rem 引数を確認 echo 第1引数には「%1」が指定されています。 echo 第2引数には「%2」が指定されています。 echo 第3引数には「%3」が指定されています。 |
4行目に「shift」コマンドを追記しました。以下、実行結果です。
「%1」には第2引数で指定した値が入っています。また、「%2」、「%3」にも一つずつずれた引数が代入されていることが分かります。
%1 → 引数2
%2 → 引数3
%3 → 引数4
…
このように、「shift」コマンドを実行すると、一つずつ引数がずれて「%?」に代入されるのです。
さらに、引数の確認前に「shift」コマンドを2回実行したバッチファイル(arg_shift2.bat)、
1 2 3 4 5 6 7 8 9 10 |
@echo off rem 「shift」コマンドを2回実行 shift shift rem 引数を確認 echo 第1引数には「%1」が指定されています。 echo 第2引数には「%2」が指定されています。 echo 第3引数には「%3」が指定されています。 |
を実行すると、結果は以下のようになります。
%1 → 引数3
%2 → 引数4
%3 → 引数5
…
10個以上ある引数を読み込む
「shift」コマンドはよく10個以上ある引数を読み込むときに使用されます。
通常、バッチファイルに指定できる引数の上限は9個です。それは、引数を格納するプレースホルダー「%1,%2,…%9」が9個までしか用意されていないためです。しかし、「shift」コマンドを利用すると10個以上の引数も指定できるようになります。
例えば、以下のように12個の引数を指定してバッチファイルを実行したとします。
1 |
shift_arg12.bat arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 arg11 arg12 |
このままでは、「%1」から「%9」には「arg1」から「arg9」が格納されています。
%1 → arg1
%2 → arg2
%3 → arg3
…
%9 → arg9
「%10」などは存在しませんので、第10引数以降はこのままでは参照できません。そこで、「shift」コマンドを使用します。
12番目の引数を参照したい場合には、「shift」コマンドを3回実行すれば、引数は左に3つずれて、
%1 → arg4
%2 → arg5
%3 → arg6
…
%9 → arg12
となるため、「%9」に12番目の引数が代入され、「%9」を参照すれば、第12引数が参照できます。
以下に、確認のためのバッチファイル(arg_shift3.bat)を示します。
1 2 3 4 5 6 7 8 9 |
@echo off rem 「shift」コマンドを3回実行 shift shift shift rem 「%9」の中身確認 echo 「%%9」には「%9」が入っています。 |
以下、実行結果です。
ただし、この方法では「shift」コマンドを実行するたびに小さい方の引数が順に使えなくなってしまいます。上の例では、「shift」コマンドを3回実行したため「arg1」から「arg3」を参照することができなくなっています。
全ての引数をいつでも参照できるようにするには、配列(もどき)と組み合わせた方法がよく利用されます。これは「10つ以上の引数を指定する -やりたいことから検索-」で詳しく説明しています。