▼ 2008/08/22(Fri) バッチファイルTips "%~dp0"
Windowsには、ちょっとした処理をやらせるのに便利なバッチファイルというのがあるが、VistaからのUAC(ユーザーアカウント制御)で困っていた点があった。
というのが、VistaでUACがONの場合にシステムフォルダのような昇格が必要なフォルダへの書き込みを行った場合、
カレントディレクトリが分からないとなぜ困るかというと、カレントディレクトリにあるファイルを特定のフォルダへコピーさせるのが厄介だからである。
で、色々探してたら、いいコマンドがあった。
というわけで、バッチファイルの先頭には
参考元:な○の 屋: Vista エピソード その1
というのが、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
*1 : %1で受け取ったディレクトリにa.txtを作りたい場合、%1a.txtとすると、"C:\abc\"a.txtという風になる可能性がある。これを防ぐため、%~1a.txtとすれば、C:\abc\a.txtとなる。
参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクやはてブしていただけると助かります…。
コメントも歓迎です。
▼ コメント(0件)
- TB-URL http://mo.kerosoft.com/056/tb/