こんにちは!今回はバッチファイルの中でよく使うパスの指定方法をまとめておきます。
バッチファイルの中では「%~0」を使うことで自分自身のパスを簡単に取得できます。
よく使う方法ではあるので、まとめて紹介していきたいと思います。
%~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の間に記号が入ると、それに対応するパスの一部分が変換されるような仕組みです。
恐らくdriveの「d」、pathの「p」、nameの「n」、extendの「x」なのかと考えられますね。
※これは筆者の思い込みかもしれません・・・覚えやすいのでこれで覚えています。
組み合わせて使う
上記のアルファベットは組み合わせることで目的のパスを取得することが可能です。
%~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コマンドで表示したりするのがほとんどだと思います。
あとはバッチファイルと同じフォルダにカレントフォルダを移動するときに便利ですね。
管理者実行した際などに、相対パスがズレてしまうことを防げます。
これを実行するとバッチと同じ場所にカレントフォルダが移動できます。
また、Setにて変数にフルパスが入り、%~dpnx0と同じフルパスが出力されます。
最初はすこし分かりづらいですが、慣れると非常に便利ですので、お役にたてば幸いです。
コメント