「%~dp0」を理解すれば、Windowsバッチ中でディレクトリ名やファイル名を自由に使えるから便利

Windowsバッチを作成する際、もしくは、他の人が作ったWindowsバッチでよく出てくるのが、「%~dp0」みたいな記述。

「%」とか「~」沢山あって、何がなんだか分からない~!と毎回調べることになるので、ここにまとめておきます。

ちなみに、分からなくなったら、コマンドプロンプトを開いて、「help for」と打ってReturnすると、ヘルプメッセージが表示されるので、大体は確認できます。

「%~dp0」の意味は?

さて、最初に、「%~dp0」を読み解くことにしましょう。

そもそも、Windowバッチでは、「%0」や「%1」など、「%数字」は、引数を表し、「0」は特別に、そのバッチファイル自身、それ以降は第一引数、第二引数となります

バッチ名が「TEST_MAIN.bat」だった場合、

「TEST_MAIN.bat aaa bbb」を実行すると、

「%0」→ → →D:\MyDownload\script\TEST_MAIN.bat
「%1」→ → →aaa
「%2」→ → →bbb

のように対応することになります。

「%」と「0」に挟まれた「~dp」の意味は?

「~dp」のように「%」と「数字(たとえば0)」の間にある「~」や「d」が、それらをどのように加工して取り出すかのオプションになります。加工して取り出すことを、プログラムの世界では「展開する」といいます。

「~」・・・これは、ドライブ、ファイルパスから「”」を取り除きます。Windowsでは、「Program Files」のように、スペースを含んだパスも良く使われますので、これを引数に渡すときに「”C:\Program Files\Java”」のように囲ったりします。この「”」を取り除き、純粋なパス文字列にするのに必要になります。

それ以外の「d」や「p」などのオプションは、ドライブやファイル名の含まれた文字列から、何を取り出すかの指定を行います。

具体的には、下記のような情報を取り出すことが可能で、複数組み合わせることも出来ます。

%~d0%0をドライブ文字だけに展開
%~p0%0をパス名だけに展開
%~n0%0をファイル名だけに展開
%~x0%0をファイル拡張子だけに展開
%~dp0%0をドライブ文字とパスだけに展開
%~nx0%0をファイル名と拡張子だけに展開

組み合わせた場合

%~dp0%0をドライブ文字とパスだけに展開します。
%~nxI0%0をファイル名と拡張子だけに展開します。
%~fs0%0を完全なパスと短い名前だけに展開します。