2008/08/22(Fri)バッチファイルTips "%~dp0"
2008/08/22 13:20
というのが、VistaでUACがONの場合にシステムフォルダのような昇格が必要なフォルダへの書き込みを行った場合、
- 昇格しないとカレントディレクトリは実行位置だが、書き込めない
- 昇格すると、カレントディレクトリが強制的にC:\Windows\System32になる
カレントディレクトリが分からないとなぜ困るかというと、カレントディレクトリにあるファイルを特定のフォルダへコピーさせるのが厄介だからである。
で、色々探してたら、いいコマンドがあった。
cd /d %~dp0詳細部を説明していくと
- cd
- Change Directoryコマンド
- /d
- 現在のドライブ名も一緒に変更する(これが無いとドライブを跨いだcdが不可能)
- %0
- %1, %2, %3...で第1, 2, 3,...引数を取得できるように、%0で実行パスが取得できる
- ~dp
- dでカレントドライブ、pでカレントディレクトリ、~で""を削るという指定。~が無かった場合、中途半端に"が残ったりするので。*1
というわけで、バッチファイルの先頭には
@echo off cd /d %~dp0からはじめる癖をつけようか…。
参考元:な○の 屋: Vista エピソード その1