本記事では、バッチファイルが格納されているディレクトリのパスを取得する方法と、その使い方について紹介します。
バッチファイルが格納されているパスの取得方法
特殊な変数 %~dp0 を使用すると、バッチファイルが格納されているディレクトリのパスを取得できます。たとえば、以下のようにechoコマンドで表示すると、バッチファイルが格納されているパスを表示できます。
@echo off
echo BatchFile is in: %~dp0
pause
特殊な変数 %~dp0 の使い方
カレントディレクトリをバッチファイルの格納場所に戻す
カレントディレクトリをバッチファイルの格納場所に戻す場合に %~dp0 を使用します。
@echo off
echo 現在のカレントディレクトリを表示1
echo %CD%
rem カレントディレクトリを移動
cd aaa
cd bbb
echo 現在のカレントディレクトリを表示2
echo %CD%
rem バッチファイルの格納場所に戻る
cd "%~dp0"
echo 現在のカレントディレクトリを表示3
echo %CD%
pause
実行結果
現在のカレントディレクトリを表示1
D:\work
現在のカレントディレクトリを表示2
D:\work\aaa\bbb
現在のカレントディレクトリを表示3
D:\work
続行するには何かキーを押してください . . .
バッチファイルと同じ場所にあるプログラムやスクリプトの実行
バッチファイルと同じディレクトリ内にある外部プログラムや他のバッチファイルを呼び出すときに、%~dp0とファイル名を連結して使用します。
以下は、バッチファイルと同じ場所にあるmyCommand.exeを実行する処理です。%~dp0にmyCommand.exeを連結している点に注意してください。
@echo off
rem ★バッチファイルが格納されているパス + 実行ファイルのパス
set "scriptPath=%~dp0myCommand.exe"
rem 実行
call "%scriptPath%"
バッチファイルと同じ場所にあるファイルの使用
バッチファイルと同じディレクトリに配置された設定ファイルや他の補助的なファイルを読み込む場合に、%~dp0を使用してファイルの絶対パスを指定します。
以下は、バッチファイルと同じ場所にconfig.txtが存在するかどうかをチェックし、存在する場合は処理を行います。%~dp0にconfig.txtを連結している点に注意してください。
@echo off
rem ★バッチファイルが格納されているパス + 設定ファイルのパス
set "configPath=%~dp0config.txt"
rem 設定ファイルの存在確認と読み出し
if exist %configPath% (
echo Configuration file found.
type %configPath%
) else (
echo Configuration file not found.
)
pause
そもそも %~dp0 とは?
%~dp0は、バッチファイル内で使用される特殊な変数展開です。それぞれの部分は次のように分解できます。
- %0:実行中のバッチファイルのフルパスです。
- ~(チルダ):特殊な変数展開の開始を示す記号。パスからダブルクォートも取り除きます。
- d:%0から「ドライブレター」を取得します。特殊な変数展開の機能のひとつ。
- p:%0から「パス」を取得します。特殊な変数展開の機能のひとつ。
したがって、%~dp0を組み合わせると、「実行中のバッチファイルが存在するドライブレターとパス(ダブルクォートを除去後)」となります。
@echo off
echo 1: %0
echo 2: %~0
echo 3: %~d0
echo 4: %~p0
echo 5: %~dp0
pause
実行結果
1: "D:\work\sample.bat"
2: D:\work\sample.bat
3: D:
4: \work\
5: D:\work\
続行するには何かキーを押してください . . .
まとめ
本記事では、バッチファイルが格納されている変数 %~dp0 について紹介しました。