2020年4月27日月曜日

バッチファイルのテンプレート

そういえばWindows用のバッチを書くとき、いつも同じテンプレート使っていました。
いつの間にか忘れてしまいかねないので、ソースコードの解説を書くことにします。

まずはテンプレートのソースコードをドン!


@ECHO OFF

まずはおなじみ"@ECHO OFF"です。
コマンド実行時に、コマンドそのものの出力を無効にします。
バッチによっては標準出力に出したいときもありますが、大半はいらないでしょう。

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

単語ごとにいきましょう。
"SETLOCAL"は、以降の環境変数の設定がローカル変数扱いとなります。
"ENABLEEXTENSIONS"はコマンド拡張機能を有効にします。
通常は有効なはずなのですが、念のために入れているような感じです。
"ENABLEDELAYEDEXPANSION"は変数の遅延展開を有効にします。
主にループ時に働き、これを入れないと想像通りの動きをしないので基本的には入れます。

SET "CURRENT_DIR=%CD%"

"CURRENT_DIR"という変数に、カレントディレクトリを格納しておきます。
後の処理でカレントディレクトリが取りにくくなるので、今のうちに退避させておきます。

PUSHD %~dp0

バッチファイルのディレクトリに移動します。
バッチファイルはバッチファイルの場所を基準とした処理を書くことが多いので、
テンプレートで移動してしまいます。
これでどこからバッチを実行しても同じ処理を実行してくれます。
カレントディレクトリに対して処理を行いたい場合は、"CURRENT_DIR"を参照するだけです。

POPD

ディレクトリの場所を元に戻します。
バッチファイルからバッチを実行している場合は、
ディレクトリが戻ってないと不具合を生じる可能性があるからです。

ENDLOCAL

ローカル変数のスコープを終了します。
これもバッチファイルからバッチを実行していた場合を考慮しているのですが、意味あったっけ?

このテンプレートに書いてあることを実行すれば、
よくあるミスを回避できる…かもしれません。

0 件のコメント:

コメントを投稿