ちょっとした処理を自動化するのにとっても便利なバッチファイル。でも、たまにしか使わないので、細かいテクはすぐ忘れてしまうんですよね。
今回は、実行するバッチファイルのディレクトリを取得する方法をメモ。
バッチファイルが存在しているディレクトリを取得
環境変数「%~dp0」がバッチファイルが存在しているディレクトリになります。
C:\> type D:\tmp\test.bat echo %~dp0 C:\> D:\tmp\test.bat D:\tmp\
バッチファイル配下のファイルなんかをコピーしたい時に役立ちそうです。
C:\> type D:\tmp\filecopy.bat copy %~dp0sourcedir\* E:\destdir
この例では、バッチファイルと同じフォルダにあるsourcedir内のファイルをE:destdirにコピーします。
コピー元をD:\tmpと絶対表記で書かない分、汎用性が出てきますね。
バッチファイルが実行しているディレクトリを取得
バッチファイルが実行されているディレクトリ(カレントディレクトリ)を取得する方法です。
環境変数「%CD%」がバッチファイルが現在実行されているディレクトリになります。
C:\> type D:\tmp\test2.bat echo %CD% C:\> D:\tmp\test2.bat C:\
正確な意味では、こちらが「カレントディレクトリ」になります。
コメント
見出しに書かれている「バッチファイルのカレントディレクトリ」などというものは存在しません。「バッチファイルのディレクトリ」のことを「カレント」ディレクトリと呼ぶことはありません。「カレント」の意味はご存知でしょうか。
Google で検索してこのページが出てきたので、でたらめな情報は載せないでほしいです。
いつも当ブログをご覧くださいましてありがとうございます。
記事中にもありますが、環境変数「%~dp0」はバッチファイルが実行されているディレクトリのことです。
一般的な「カレントディレクトリ」は現在位置しているディレクトリのことを指しますよね。
コンピュータに親しんでいる人には「今いるディレクトリ」という表現のほうがしっくり来るかも知れません。
ただ、私の周りだけかも知れませんが、長年SEをしていて「カレント」を「現在地」の意味で使ったり、実行ファイルのある場所の意味で使ったりすることもあります。例えば「このファイル、実行ファイルのカレントに置いといて」とか。
なので、この記事はその両方の意味として書いています。
一概にでたらめな情報とは言い切れないので、記事の内容はそのままにしておく予定です。
ご指摘、ありがとうございました。