記事一覧

DOSバッチでバッチ本体のファイルパスを取得する方法




目次



DOSバッチはういやつ

ハロー、みなさん。エジソンです。

DOSバッチは、歴史深いもので、擬人化したら老人のレベルかなと思います。そんな、時には厳しく時には優しく、時には疎まれ、だけど必要とされてしまう…そんな切っても切り離せないDOSバッチのテクニックをご紹介します。

作業ディレクトリが何処なのかを意識してバッチが実行されていることを知る

バッチから他のバッチファイルを実行したり、バッチファイルの同フォルダに存在するファイルを読み込んだりする場合に安全に実行するにはどうしたら良いでしょうか。

例えば以下のような、exec.batを実行する場合について考えてみます。

exec.bat
echo off

rem サブバッチを実行する
call sub.bat

echo on

exec.bat が c:¥temp に存在するとして、実行する方法には幾つかのパターンがあります。

方法1

一つは、そのバッチが存在するパスに移動してから実行する方法です。この場合の作業ディレクトリは、バッチが存在するパスとなります。

c:¥tempのexec.batを実行する(カレントディレクトリがc:¥tempなのでそのまま実行)
c:¥temp > exec.bat

方法2

一方で、そのバッチが存在するパスに移動せずに、相対パスや絶対パスでバッチファイルを指定して実行する方法があります。

c:¥tempのexec.batを実行する(カレントディレクトリがcドライブ直下なので、絶対パスで実行)
c:¥ > c:¥temp¥exec.bat

まとめると…

バッチ実行時に何処のディレクトリで実行されているかを示すパスを作業ディレクトリと呼びます。

作業ディレクトリが、実行バッチが存在する場所と同様であれば、バッチから他のバッチを実行する場合に、相対パスでの実行が可能ですが、そうでない(作業ディレクトリが何処なのか分からない)場合は、一工夫必要です。

ちなみに、Windowsからbatファイルをダブルクリックなどで実行される場合には、batファイルが格納されているフォルダパスが作業ディレクトリとなります。

バッチ本体のファイルパスを取得する

そこで、実行されるバッチファイル自身のパスを取得して、他のバッチファイルを安全に実行できるようにすると言うのが今回の趣旨です。

バッチ本体のファイルパスを取得してカレントディレクトリを移動する
cd /d %~dp0

バッチ本体のファイルパスを取得して変数に格納する
set curpath=%~dp0

上記の2つのテクニックの何れかを駆使して、exec.batを実行してみます。このようにすることで、作業ディレクトリが何処にあろうと、安全にバッチが実行されるようになります。

@echo off

rem その1: バッチ本体のファイルパスを変数に格納してバッチを実行
set curpath=%~dp0
call %curpath%sub.bat

rem その2: バッチ本体のファイルパスのディレクトリに移動してバッチを実行
cd /d %~dp0
call sub.bat

@echo off


参考
Pentan.info - %~dp0 とは


関連記事

このエントリーをはてなブックマークに追加

コメント

コメントの投稿

非公開コメント

プロフィール

EZOLABブログへようこそ。
EZOLABは、札幌のソフトウェア会社です。

http://ezolab.co.jp