#要約
管理者権限が必要なバッチファイルを起動したい、かつ、毎回「右クリック > 管理者として実行」を行うのが困難or面倒な場合によく用いる起動用バッチファイル。
@echo off
openfiles > NUL 2>&1
if NOT %ERRORLEVEL% EQU 0 (
REM 管理者権限が無いのでstart-process -verb runasで権限付与する
powershell start-process 起動したいバッチファイル -ArgumentList "引数1","引数2" -verb runas
) else (
REM 管理者権限があるのでSTARTあるいはCALLコマンドで起動できる
START 起動したいバッチファイル 引数1 引数2
)
#解説
基本的には参考
元のURLを参照すればだいたい解決する。
openfiles
は管理者権限が無い場合にERRORLEVEL
に値を入れるので、0
ならば管理者権限があり、それ以外の値なら権限が無いと判定できる。これ以外にも権限の確認方法はあるので適当なものを選べばよいと思う。
権限がある場合はSTART
コマンドによりバッチファイルが(別ウィンドウで)起動する。なお例ではSTART
としているが、私自身は別ウィンドウの起動が邪魔なのでCALL
コマンドを使う場合も多い1。
権限が無い場合、powershell
のstart-process
を用いる。-verb runas
オプションが管理者権限を付与する。.bat
ファイルはそのものが実行ファイルなので、別ウィンドウで起動してくる。なお引数を与えたい場合は例の様に-ArgumentList
オプションを付与した上で""
で囲み、,
区切りで配置すれば良い。
#動機
最初は条件分岐せずpowershell start-process -verb runas
で常に起動しても良いかと思っていたが、微妙に遅くてもにょったので。
コマンドプロンプトから管理者権限のコマンドプロンプトに切り替える
-
start.bat
が以降に処理を行わないことが前提 ↩