いつの間にか忘れてしまいかねないので、ソースコードの解説を書くことにします。
まずはテンプレートのソースコードをドン!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@ECHO OFF | |
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION | |
SET "CURRENT_DIR=%CD%" | |
PUSHD %~dp0 | |
REM ここにバッチ処理を書きます | |
POPD | |
ENDLOCAL |
@ECHO OFF
まずはおなじみ"@ECHO OFF"です。コマンド実行時に、コマンドそのものの出力を無効にします。
バッチによっては標準出力に出したいときもありますが、大半はいらないでしょう。
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
単語ごとにいきましょう。"SETLOCAL"は、以降の環境変数の設定がローカル変数扱いとなります。
"ENABLEEXTENSIONS"はコマンド拡張機能を有効にします。
通常は有効なはずなのですが、念のために入れているような感じです。
"ENABLEDELAYEDEXPANSION"は変数の遅延展開を有効にします。
主にループ時に働き、これを入れないと想像通りの動きをしないので基本的には入れます。
SET "CURRENT_DIR=%CD%"
"CURRENT_DIR"という変数に、カレントディレクトリを格納しておきます。後の処理でカレントディレクトリが取りにくくなるので、今のうちに退避させておきます。
PUSHD %~dp0
バッチファイルのディレクトリに移動します。バッチファイルはバッチファイルの場所を基準とした処理を書くことが多いので、
テンプレートで移動してしまいます。
これでどこからバッチを実行しても同じ処理を実行してくれます。
カレントディレクトリに対して処理を行いたい場合は、"CURRENT_DIR"を参照するだけです。
POPD
ディレクトリの場所を元に戻します。バッチファイルからバッチを実行している場合は、
ディレクトリが戻ってないと不具合を生じる可能性があるからです。
ENDLOCAL
ローカル変数のスコープを終了します。これもバッチファイルからバッチを実行していた場合を考慮しているのですが、意味あったっけ?
このテンプレートに書いてあることを実行すれば、
よくあるミスを回避できる…かもしれません。
0 件のコメント:
コメントを投稿