バッチやシェルスクリプトで、正規化された絶対パスを取得したいケースがありました。
Linuxの場合は、realpathコマンドという便利なものがありますが、
Windowsのbatだとそういう便利な関数はなさそう…。
(powershellとか使えば別だと思いますが…)
間にデリミタが複数挟まっていたり、相対パスが入っていたりすると、色々と弊害が置きかねないため、パスをきれいに取る方法はないかな…と考えていたのですが、意外に簡単にできました。
とすると、以下のようになります。
■引数が「E:」の場合
■引数が「C:¥Windows¥..¥Program Files\test.txt」の場合
となりました。
%~p1%が相対パスをきれいに処理してくれるみたいなので、これはありがたいです。
パスチェックとかで操作が厄介になるなら、一度引数で渡して処理してしまうのがいいかもしれませんね。