batファイル作成memo
- 引数の取得
引数は複数与えることが出来る。
ファイル内のコードから引数を参照する場合、以下のようにする。
「%0」には自ファイル名称が格納され、「%1,%2,...」と順に連番で引数を取得できる。
■----------------------------
第一引数,第二引数,...第n引数
%1, %2, ...%n
■----------------------------
ちなみにこの方法で引数が取得できるのは「%1~%9」までの9つ。
それ以上引数を扱う場合は、別途でなんかしら考慮が必要らしい。ここでは割愛。
- 変数の扱い
変数の定義には、「set」を使用する。
■----------------------------
set 変数名=値
set arg1=1
set arg2=abc
set arg3="ABC"
■----------------------------
変数を参照する場合、参照する変数名の前後に「%」を記述する。
■----------------------------
%参照する変数名%
%arg1%
■----------------------------
また、複数の変数の値を連結して使用する場合は以下のように立て続けに並べるだけ。
■----------------------------
%arg1%%arg2%
■----------------------------
- ブロック内の仕様
batの仕様上、if文やfor文などのブロック内の変数の値は、ブロックの開始時点に全て展開されてしまう。
なので、ブロック内で変数に値を代入したとしても、その変数を参照するとブロック処理開始時点の値しか取れない。
この問題を回避するのが、「遅延環境変数」という仕組みである。
「遅延環境変数」を利用すれば、ブロック内においても、変数の値の評価を参照するまで遅らせることができる。
・遅延環境変数を取り扱う場合は、以下の手順が必要
a) ブロックの開始より前に「setlocal enabledelayedexpansion」を宣言する。
※遅延環境変数を使用するという宣言
b) ブロック内で代入した値を参照するときは、
変数名には「%」ではなく「!」を前後に記述する。
c) 遅延環境変数の使用を終了する時点で、「endlocal」を宣言する。
■---------------------------
setlocal enabledelayedexpansion
for /f %%i in (%files%) do (
set file=%%i
echo ファイル:!file!>>resultFiles.txt
)
endlocal
■----------------------------
ちなみに、ブロック内で「>」や「>>」を使用して値を出力する場合、
■----------------------------
echo ファイル:!file! >>resultFiles.txt
■----------------------------
このように「>>」の前にスペースを入れてしまうと、そのスペースも反映されてしまうので注意。