やりたいこと
Windowsのbatを書いているとよく出てくる呪文、%~dp0に関して深堀してみます。
そもそも%~dp0ってなに?
%~dp0をbatの中に記述すると実行したbatの保存されたフォルダに置換されます。
よくbatの上の方に下の記述がされています。
cd /d %~dp0
これはどこからbatを起動してもカレントフォルダをbatのあるフォルダに固定するためです。(batの中に相対パスが書いてある場合、カレントフォルダが動作に影響します。)
ちなみに /dはカレントドライブを同時に変更するオプションです。
%~dp0の成り立ち
”%~dp0”は”%0”に”~”と”d”と”p”のオプションを追加したものです。
F:\bat\test.batでそれぞれ値を出力してみます。(@echo offは省略)
エクスプローラから実行した際の結果です。
%0
%0は実行したbatのパスがを””で囲ったものが格納されます。(コマンドプロンプトから起動したときは相対パス。エクスプローラから起動したときは絶対パス入ることに注意。)
F:\bat\test.bat:
echo %0
出力:
"F:\bat\test.bat"
ちなみに%1には第1引数の値が入ります。
F:\bat\test.bat:
echo %0
echo %1
コマンド:
test.bat arg1
出力:
"F:\bat\test.bat"
arg1
~
%0の%と0の間に~を入れることで、””が削除されます。
F:\bat\test.bat:
echo %~0
出力:
F:\bat\test.bat
d
%~0の~と0の間にdを入れることで、batが保存されているドライブが出力されます。%d0は動作しないので注意。
F:\bat\test.bat:
echo %~d0
出力:
F:
p
%~0の~と0の間にpを入れることで、batが保存されているフォルダが出力されます。%p0は動作しないので注意。
F:\bat\test.bat:
echo %~p0
出力:
\bat\
%~dp0
%~dp0は上記の組み合わせです。
batの保存された場所のドライブとフォルダを接続したものを出力します。
そのためbatの保存されたフォルダの絶対パスが返されます。
F:\bat\test.bat:
echo %~dp0
出力:
F:\bat\
コメント