【Bat】バッチファイル自身のパスを取得する方法

Bat

今回はバッチファイルの中でよく使うパスの指定方法をまとめておきます。

%~0を使う

バッチファイルの中だけで使える方法で、%~と0の間にd,p,n,xの記号を入力するとバッチファイル自身のパスを取得することができます。

C:\Users\User\Desktop\hoge.bat というバッチファイルを作成した場合、下記のような形で自身のパスを取得できます。

%~0
・ファイルのフルパス:C:\Users\User\Desktop\hoge.bat

%~d0
・ファイルのあるドライブのみ:C:

%~p0
・ファイルのドライブとファイル名を抜いたパス: \Users\User\Desktop\

%~n0
・ファイル名のみ:hoge

%~x0
・拡張子のみ:.bat

このようにして、%~と0の間に記号が入ると、それに対応するパスの一部分が変換されるような仕組みです。

組み合わせて使う

上記のアルファベットは組み合わせることで目的のパスを取得することが可能です。

%~dp0
・ファイルのカレントフォルダ: C:\Users\User\Desktop\

%~nx0
・拡張子付きのファイル名:hoge.bat

%~dpnx0
・フルパス(%~0と同等): C:\Users\User\Desktop\hoge.bat

この3つがよく使う形かと思われます。

順番がおかしくても?

どうしてこの仕様なのかわかりませんが、順番を間違えてもパスとしてちゃんと動作するようです。

%~xdpn0
%~dpxn0
%~xnpd0
%~dpnx0

これらすべて %~0と同じフルパスを出力:C:\Users\User\Desktop\hoge.bat

まぁアルファベットの羅列ではあるので、順不同でも動くようにとの配慮なのですかね?

実際に使ってみる

これらの取得方法はこれ単体ではあまり意味を成しません。
setコマンドで変数に入れたり、echoコマンドで表示したりするのがほとんどだと思います。

あとはバッチファイルと同じフォルダにカレントフォルダを移動するときに便利ですね。
管理者実行した際などに、相対パスがズレてしまうことを防げます。

サンプルコード

@echo off
cd /d %~dp0
set FOLDER_PATH=%~0

echo %FOLDER_PATH% は %~dpnx0と同じです

pause
exit

これを実行するとバッチと同じ場所にカレントフォルダが移動できます。
また、Setにて変数にフルパスが入り、%~dpnx0と同じフルパスが出力されます。

最初はすこし分かりづらいですが、慣れると非常に便利ですので、お役にたてば幸いです。

コメント

Translate »
タイトルとURLをコピーしました