以前、不特定の人が面倒な処理を簡単に同じように行えるようにするため、バッチファイルを作成したことがあります。その時のソースの一部を利用して書き方の説明を備忘録を兼ねて記載します。
バッチファイルとは
何年も前から使われているもので、コマンドプロンプトで実行させるコマンド(実行文)が記述したものになります。ファイル拡張は「.bat」。実行させるにはダブルクリックをしたり、他のプログラムから実行文により実行させます。単純な処理を実行させるために、アプリなどの一部に使われていることも多いです。
注意しておきたいのは、バッチファイルは、バッチファイルの内容を一度全て読み込み、1行目から実行していくことです。繰り返し処理を記載する際は注意が必要です。
作成したバッチファイルの概要
SQuaREの修正性(保守性)の観点から、今のスキル内で他者でも極力メンテナンスしやすいような作りを心掛けつつ、以下の機能を搭載しています。
実施できること
- 特定のファイルをコピーする。
- 「指定した年月日」をファイル名/作成日時/更新日時に設定する
- 1つの「指定した年月日」に対し複数の文書を作成できる。
- コピーされたファイルのファイル名には、連番を付ける
- 大量データの場合、どこまで処理ができているか不明なため、年月日単位で実行内容を表示する
- 処理完了時には、コマンドプロンプト上に「処理開始日時」「処理終了日時」を表示する
- ログを出力する
- ログには、コピー元、コピー先、処理開始日時、処理終了日時を記載する
制限事項
- 作成時刻/更新時刻は12:00で固定。
- 中止する処理は特別作成しないため、コマンドプロンプトに従う。
使用している構文やコマンド
@echo off
このコマンドは、処理の実行コマンドをコマンドプロンプト上に表示させるかどうかを設定させるものになります。
バッチファイルの先頭に記載しておけば、処理の実行コマンドをコマンドプロンプト上に表示させることなく処理が進みます。例えば、ユーザーにバッチファイル実行中に操作させたい場合、処理内容が多い場合などは付けておいた方が良いでしょう。表示させると本当に表示させたい内容が埋もれてしまうので、基本的には記載しておいた方が良いと思います。
rem
コメントを記載するためのコマンドです。以下のような形で使用しています。
rem *** メイン関数 ***
echo
意図的にテキストを表示させたい問いに用いるためのコマンドです。以下のような形で使用しています。
echo 中止する場合は「Ctrl+C」を押してください。
また、改行(空白行)を入れたい場合は、「セミコロン(;)」を用いて以下のように記載します。
echo;
set
変数を宣言する時のコマンドです。以下の例では、変数:prcStrDateを宣言すると同時に値:20200101を代入しています。「%」については、後述の「%変数名%」をご確認ください。
set prcStrDate=20200101
補足として「set」にはオプションがあります。例えば四則演算を行いたい場合は「/a」を記載してください。以下の例では、変数:hensu_a と 変数:hensu_b の値を加算してものを宣言した変数:resultに代入しています。
set /a result=hensu_a+hensu_b
また、ユーザー入力を受け付けたいときは「/p」を記載してください。以下の例では、宣言した変数:filePath_before にユーザー入力された文字列を代入しています。
set /p filePath_before=””
上記例の「””」の部分ですが、ユーザー入力を受け付ける際にコメントを表示させたい場合は以下のように記載することもできます。
set /p filePath_before=”ファイルパスを入力してください。:”
※上記は、以下と同じ内容をしています。ただし、コメントと入力欄が上記では一行になり、以下では改行されるという違いがあります。どちらか用途に見合った方を選ぶと良いでしょう。
echo ファイルパスを入力してください。:
set /p filePath_before=””
%変数名%
変数に格納されている値を参照する場合に使用します。以下の例では、変数:prcStrDateに現在日時(DATE)の値を代入しています。
set prcStrDate=%DATE%
pause
処理を一時停止する際に使用します。利用者にメッセージを読ませたい時やバッチファイルを作成中に処理の途中経過を確認する時などに役立つことでしょう。一時停止しているときは、コマンドプロンプト上には「続行するには何かキーを押してください . . .」のメッセージが表示されます。しかし中には「続行するには何かキーを押してください . . .」を表示させたくない場合もあると思います。その場合は、以下のように記載すると良いでしょう。デバッグ中の方はこちらを利用することが多いかもしれませんね。
pause > nul
+=(インクリメント)、-=(デクリメント)
四則演算子を使用してインクリメントやデクリメントを実行させる時に、以下のように記載することも可能です。以下では「1」を加減算していますが、もちろん「1」以外の数値の加減算させることも可能です。
a+=1
b-=1
ファイル書き出し
ファイルを書き出すには、既出の「echoコマンド」を使用します。echoコマンドの後に「> “任意のファイル名”」で書き出しが可能です。もし対象のファイルがなければ、自動で新規作成されます。以下では、変数:filePath_beforeに代入されている値をファイル:log.txtに書き出しています。
echo コピー元: %filePath_before% > log.txt
ここで注意しなければならないのは、「>」だと上書きしてしまうことです。そのため、既存ファイルで中身に記述内容があった場合は無くなってしまいます。もし、追記する形をとる場合は「>>」を使用します。以下では、1行目でファイルを上書きし、2行目で1行目で書き出した内容の次の行に追記する処理を行っています。
echo コピー元: !filePath_before! >log.txt
echo コピー先: !filePath_after! >>log.txt
まとめ
今回は、バッチファイル作成時の基本的なコマンドをまとめました。他にもバッチファイル作成時に使用したコマンドや構文をまとめていきますので、参考にしてみて下さい。