Windowsバッチファイルを管理者として実行したときの問題点と回避方法
Windowsでバッチファイル(*.bat, *.cmd)を「管理者として実行」すると、通常実行では普通に動くプログラムが上手く動かないことがあります。
問題点
例えば、以下のようにtest.batを作成してC:\Tempに配置します。
@echo off cd pause
エクスプローラーでC:\Tempを開いてtest.batを起動すると
C:\Temp 続行するには何かキーを押してください . . .
という感じになります。
次に、このtest.batをコンテキストメニューの「管理者として実行(A)...」から起動します。
ユーザーアカウント制御のダイアログが出てきますので、ここで「はい(Y)」を選択します。すると、
C:\Windows\system32 続行するには何かキーを押してください . . .
ということで、通常実行と管理者として実行ではカレントディレクトリが違うことが確認できます。
カレントディレクトリの違いにより挙動に違いが発生する場合があります。
それ以外の問題の場合はこちらもどうぞ
Windowsバッチファイルを管理者として実行したときの問題点と回避方法2 - サラリーマンIT技術者の調査レポート
回避方法
この問題の回避方法としては次の2つが考えられます。
- フルパス指定する
- バッチファイルの場所をカレントにする
このうち、フルパスを指定するのは芸がないので、バッチファイルの場所をカレントにする方法について調べてみました。
いきなり答えを書いてしまうと次のようになります。
%~d0 cd %~d0%~p0 cd
ということで、C:\Temp\test.batを書き換えて早速実行してみます(「管理者として実行」を忘れずに)。
C:\Windows\system32>C:
C:\Windows\system32>cd C:\Temp\
C:\Temp>cd
C:\Temp
C:\Temp>pause
続行するには何かキーを押してください . . .
試しに、管理者としてではなく、通常実行してみます。
C:\Temp>C:
C:\Temp>cd C:\Temp\
C:\Temp>cd
C:\Temp
C:\Temp>pause
続行するには何かキーを押してください . . .
ということで、バッチファイルの先頭にこの記述を追加すれば、通常実行・管理者として実行のいずれでも同じカレントディレクトリを想定することができます。
お疲れ様でした。
ポケット詳解 Windowsコマンド辞典―Windows 8対応 (Pocket詳解)
- 作者: 岡田庄司
- 出版社/メーカー: 秀和システム
- 発売日: 2013/03
- メディア: 単行本
- この商品を含むブログを見る