【バッチファイル】管理者権限が無い場合に付与して実行


要約

管理者権限が必要なバッチファイルを起動したい、かつ、毎回「右クリック > 管理者として実行」を行うのが困難or面倒な場合によく用いる起動用バッチファイル。

start.bat
@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
権限が無い場合、powershellstart-processを用いる。-verb runasオプションが管理者権限を付与する。.batファイルはそのものが実行ファイルなので、別ウィンドウで起動してくる。なお引数を与えたい場合は例の様に-ArgumentListオプションを付与した上で""で囲み、,区切りで配置すれば良い。

動機

最初は条件分岐せずpowershell start-process -verb runasで常に起動しても良いかと思っていたが、微妙に遅くてもにょったので。

参考

バッチファイルが管理者権限で動作しているか確認

コマンドプロンプトから管理者権限のコマンドプロンプトに切り替える


  1. start.batが以降に処理を行わないことが前提