Windowsメモ: バッチファイルのファイル名やディレクトリ名を取得する (%0)

バッチパラメータ置換

現在実行中のバッチファイルに関するパス情報は、変数 %0 で参照することができます。 実際には、ファイル名にスペースが含まれている場合にも正しく処理できるようにするために、%0 ではなく %~0 で参照します。

echo %~0

さらに、次の表のように、%~0 の間に修飾子 (d, p, n, x) を指定することで、ディレクトリ名や拡張子だけを取り出すことが可能です(組み合わせも可能)。 この機能を「バッチパラメータ置換」と呼びます。

表の実行結果は、sample.bat バッチファイルを次のように起動した場合の結果を示しています。

C:\Users> maku\sample.bat
参照方法意味実行結果
%~0指定したファイル名maku\sample.bat
%~f0 (%~dpnx0)フルパスC:\Users\maku\sample.bat
%~d0ドライブ名C:
%~p0ディレクトリ名\Users\maku\
%~dp0ドライブ名 + ディレクトリ名C:\Users\maku\
%~n0ベースネームsample
%~x0拡張子.bat
%~nx0ベースネーム + 拡張子sample.bat

バッチパラメータ置換に関するヘルプは、call /? で確認することができます。

使用例

例えば、バッチファイルの格納されているディレクトリの絶対パスは、%~dp0 という変数で取得できるので、次のようにすれば、カレントディレクトリをバッチファイルの置いてあるディレクトリに変更することができます。

cd /d %~dp0

ちなみに、cd コマンドの /d オプションは、別ドライブのディレクトリに移動するときに必要になるので、必ず付けるようにしておくとよいです。

(おまけ)各変数の内容を調べるバッチファイル (sample.bat)

echo %%~0 ..... %~0
echo %%~f0 .... %~f0
echo %%~d0 .... %~d0
echo %%~p0 .... %~p0
echo %%~dp0 ... %~dp0
echo %%~n0 .... %~n0
echo %%~x0 .... %~x0
echo %%~nx0 ... %~nx0