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