Cou氏の徒然日記

ほのぼの日記ブログです。

Windowsで Linuxのrealpathのような値を取得したい

バッチやシェルスクリプトで、正規化された絶対パスを取得したいケースがありました。

 

Linuxの場合は、realpathコマンドという便利なものがありますが、

# realpath /home/user1/../../tmp
/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%相対パスをきれいに処理してくれるみたいなので、これはありがたいです。

パスチェックとかで操作が厄介になるなら、一度引数で渡して処理してしまうのがいいかもしれませんね。