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を完全なパスと短い名前だけに展開します。 |