プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windows、バッチファイル(.bat)でバッチファイル自身のパスを取得
結論から書けば

%~dp0

で、バッチファイル自身のパスを取得できます。

例えばこんなバッチファイルを動かすとφ(--)

■C:\test_dir\test.bat
@echo off

echo %~dp0

pause

こんな結果になりますφ(--)

C:\test_dir\
続行するには何かキーを押してください . . .

それでは理屈を見ていきましょう。

実を言うと……

Windows、バッチファイル(.bat)に引数を渡す

の記事で理屈は全部書いちゃったんですけどね。
「%~dp0」に絞って簡単に補足していきます。

まず「%0」はバッチファイル自身のファイル名(パス付き)を表します。

例えばこんなバッチファイルを動かすとφ(--)

■C:\test_dir\test2.bat
@echo off

echo %0

pause

こんな結果になりますφ(--)

C:\test_dir\test2.bat
続行するには何かキーを押してください . . .

次にパラメータの受け取りには特殊な指定方法があります。
「%~」+「指定」+「パラメータの位置」な並びで指定することで、
パラメータからファイル名だけ取得したりパスだけ取得したりできるのです。

例えば「%~d1」と指定すると1つ目のパラメータからドライブ文字だけ取得します。
同様に「%~p1」と指定すると1つ目のパラメータからパスだけ取得できるのです。

例えばこんなバッチファイルがあるとしてφ(--)
■C:\test_dir\test3.bat
@echo off

echo %~d1
echo %~p1

pause

コマンドライン上からこんな呼び出し方をするとφ(--)

C:\test_dir\test3.bat "C:\Program Files\desktop.ini"

こんな結果になりますφ(--)

C:
\Program Files\
続行するには何かキーを押してください . . .

さらに!

この特殊な指定方法は複数組み合わせることができるのです。
「%~」+「指定」+「パラメータの位置」の「指定」の部分にいっぱい書けます。

例えば「%~nx1」と書くと、ファイル名を取得する「%~n1」と拡張子を取得する「%~x1」が合体して
「ファイル名+拡張子」が取得できるのです。

同じ理屈で「%~dp1」と書くと、ドライブ文字を取得する「%~d1」とパスを取得する「%~p1」が合体して
「ドライブ名+パス」(つまりフルパス)が取得できるのです。

いよいよ大詰めです。

「%0」でバッチファイル自身のパス付きファイル名を取得できました。
「%~dp1」でパラメータのフルパスが取得できました。

がっ「%0」\(--)/「%~dp1」

たい(--)//「%~dp0」

と言うわけで「%~dp0」でバッチファイル自身のパスを取得できるのです。

同じ理屈でいろいろな情報を取得できるので、仕組みを理解しておくと便利ですよ。
よく使うのは「%~nx0」でバッチファイル自身のファイル名だけを取得したりですかね。
「%~nxt1」で、引数で指定されたファイルのファイル名と更新日時を取得して
あんなことやこんなことができたりもします。

ってなところで、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事