そまちょブログのそまちょ(@somachob)です。
バッチファイルは、手動でする作業を自動化してくれる便利なものです。
引数を使いこなせれば、もっと効率的に作業を自動化することができます。
この記事では、初心者の方でもわかるように、例を交えながらバッチファイルでの引数の使い方について解説します。
バッチファイルとは
バッチファイルは、複数のコマンドをまとめて実行するためのファイルであり、Windowsのコマンドプロンプトで使うことができます。
バッチファイルを使えば、手動でコマンドを入力する手間を省き、自動化や効率化に役立ちます。
繰り返し同じ手順を何度も実行するときには、バッチファイルを使えば簡単に行えるようになります。
バッチファイルを作成する方法
バッチファイルを作成するには、メモ帳などのテキストエディタを開いて、テキストファイルにコマンドを書いて、そのファイルを保存するときに拡張子を「.bat」や「.cmd」にするだけです。
詳しくは、次の記事を参考にしてください。
たとえば、以下のようなバッチファイルを作成してみます。
@echo off
echo Hello, World
pause
このバッチファイルは、echo コマンドを使って「Hello, world」と表示し、pause コマンドで一時停止します。
バッチファイルは、ダブルクリックで開いたり、コマンドプロンプトを使うことで実行することができます。
「hello.bat」という名前でバッチファイルを作った場合、コマンドプロンプトで次のように入力すれば実行することができます。実行するときは、バッチファイルを保存しているフォルダに移動しておいてください。
C:\Users\user\Desktop>hello.bat
これで、バッチファイルに書かれたコマンドが実行されます。
バッチファイルの引数の基礎知識
引数は、バッチファイルを実行するときに、バッチファイルに渡すパラメータのことを言います。
ディレクトリ中のファイルとサブディレクトリを一覧表示する dir コマンドを実行するとき、引数としてディレクトリやファイル名などを渡すことができます。
次のコマンドでは、dir コマンドに desktop を引数として渡しています。実行すれば、desktop のファイル一覧を表示します。
C:\Users\user>dir desktop
バッチファイルにも同じように、コマンドラインから引数を渡すことができます。
引数を使うメリット
引数を使うことで、同じバッチファイルを異なるパラメータで実行できるようになるので、汎用的に使えるようになります。
空のフォルダを作るバッチファイルについて考えてみます。mkdir は、フォルダを作成するコマンドです。
次のバッチファイルを実行すれば、バッチファイルと同じディレクトリに 20230401 という名前のフォルダを作ります。
@echo off
mkdir 20230401
pause
コマンドの中でフォルダ名を書いているので、違うフォルダ名にしたいときには、コマンドを書き換える必要があります。
しかし、引数として作成するフォルダの名前を渡すことができれば、汎用的にこのバッチファイルを再利用することができます。
引数を使うことで、柔軟性の高いバッチファイルを作ることができます。
引数の使い方
引数は、バッチファイルに対して渡されるパラメータです。
バッチファイルに渡された引数は %1、%2、%3 などを使って受け取ることができます。
%1 は1番目の引数、%2 は2番目の引数というようになっています。
次のバッチファイルは、渡された1番目の引数と2番目の引数を表示します。
@echo off
echo %1
echo %2
pause
このバッチファイルにコマンドプロンプトから「Hello」と「World」を引数として渡して実行してみます。
無事、Hello と World が表示できました。
C:\Users\user\desktop>test.bat Hello World
Hello
World
続行するには何かキーを押してください . . .
引数の渡し方
バッチファイルへの引数を渡すには、バッチファイルを実行するときに、そのあとに引数をスペース区切で指定します。
先ほどの例では、バッチファイル「test.bat」のあとに、「Hello」と「World」をスペース区切で渡しています。
C:\Users\user\desktop>test.bat Hello World
2つ以上を引数として渡すときは、その分だけスペース区切で指定します。
次の例では、「test.bat」に1番目の引数として Alice、2番目の引数として Bob、3番目の引数として Tom、4番目の引数として Jack、5番目の引数として Eve を引数として渡しています。
C:\Users\user\desktop>test.bat Alice Bob Tom Jack Eve
引数にスペースを含めたいとき
引数にスペースを含めたいときは、引数を引用符(”)で囲む必要があります。
次のバッチファイルに、引数として「Hello World」と「123」を渡したいときを考えてみます。
@echo off
echo First argument: %1
echo Second argument: %2
echo Third argument: %3
pause
このバッチファイルにコマンドプロンプトから「Hello World」と「123」を引数として渡して実行してみます。
スペース区切になるので Hello と World が分かれてしまいました。
C:\Users\user\desktop>test.bat Hello World 123
First argument: Hello
Second argument: World
Third argument: 123
続行するには何かキーを押してください . . .
引用符を使って実行してみます。Hello World をまとめて渡せています。
C:\Users\user\desktop>test.bat "Hello World" 123
First argument: "Hello World"
Second argument: 123
Third argument:
続行するには何かキーを押してください . . .
引数の数が多いときの問題点
%1、%2、・・・のように引数を指定する場合、%9 までしか使うことができません。
つまり、引数が10個以上ある場合、10個目の以降の引数は %10 のように受け取ることができません。
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
echo %11
pause
次が、バッチファイルに A から K までの11個のアルファベットを引数として渡して実行した結果です。
9個まではうまく表示できていますが、10個目以降がうまく表示できていません。
これは「%10」が「%1」と「0」と認識されているためです。
C:\Users\user\desktop>test.bat A B C D E F G H I J K L M N O
A
B
C
D
E
F
G
H
I
A0
A1
続行するには何かキーを押してください . . .
複数の引数を扱う方法
引数が10個以上のあるときの受け取り方として、shift コマンドを使う方法と %* を使う方法を紹介します。
shift コマンドを使う
shift コマンドを使えば受け取った引数をずらすことができます。
1番目の引数は%1、2番目の引数は%2、・・・と引数を受け取りますが、shift コマンドを使えば、1番目の引数が%2、2番目の引数が%3 のようにずらすことができます。
次は、shift コマンドを使って引数を受け取る具体例です。
@echo off
echo %1
shift
echo %1
shift
echo %1
shift
echo %1
shift
echo %1
shift
pause
次が、実行結果です。引数を表示後、shift コマンドを使うことで、すべての引数を %1 で受け取っています。
C:\Users\user\desktop>test.bat A B C D E
A
B
C
D
E
続行するには何かキーを押してください . . .
次のようにループを使って書くこともできます。if “%1″==”” という条件分岐で、引数がすべて処理されるまで繰り返します。
@echo off
:loop
if "%1"=="" goto end
echo %1
shift
goto loop
:end
pause
%* を使う
%* を使えば、すべての引数を一括で受け取ることができます。
次のバッチファイルは、すべての引数を echo コマンドで表示させます。
@echo off
echo %*
pause
次が、実行結果です。すべての引数を表示できているのがわかりす。
C:\Users\user\desktop>test.bat A B C D E F G H I J K
A B C D E F G H I J K
続行するには何かキーを押してください . . .
便利な方法ですが、引数を個別に扱うことはできないため、個別に扱いたいときには次のように工夫する必要があります。
for 文を使うことで、%* を1つずつ取り出して処理しています。
@echo off
set args=%*
for %%a in (%args%) do (
echo %%a
)
pause
次が、実行結果です。
C:\Users\user\desktop>test.bat A B C D E F G H I J K
A
B
C
D
E
F
G
H
I
J
K
続行するには何かキーを押してください . . .
まとめ
バッチファイルを使えば、繰り返し作業などを自動化したりすることができます。
バッチファイルには引数を渡すことができ、引数を使うことで柔軟性の高いバッチファイルを作ることができます。
引数を渡すには、引数をスペースで区切で指定します。
引数のパラメータとしてスペースを含みたいときは、引用符(”)で囲みます。
引数は、1番目の引数は%1、2番目の引数は%2、・・・のように受け取ります。
shift コマンドを使えば、受け取った引数をずらすことができます。
すべての引数をまとめて受け取るには、%* を使います。
バッチファイルについて、他にも解説しています。
Google Apps Script を使えば Googleシートなどの自動化をすることもできます。