{{category Command Prompt,nolink}} 管理者で実行する !!!管理者権限チェック 実行されているバッチファイルが管理者権限(管理者特権)で実行されているか確認する。 !! openfiles を使う openfiles を実行するには、管理者特権が必要になる。ない場合はエラーとなるため、それで判断する REM 管理者権限チェック openfiles > NUL 2>&1 IF ERRORLEVEL 1 ( ECHO 「管理者として実行」で実行してください。 pause ) !通常のコマンドプロンプトで実行した場合 C:\Users\username> openfiles エラー: ログオンしているユーザーは管理者特権を持っていません。 C:\Users\username> ECHO %ERRORLEVEL% 1 !! 整合性レベル で確認する 整合性レベルは whoami コマンドで確認でき、これが管理者特権の High であることを確認する。 REM Check for Mandatory Label\High Mandatory Level whoami /groups | find "S-1-16-12288" > NUL IF ERRORLEVEL 1 ( ECHO 「管理者として実行」で実行してください。 pause ) !管理者で実行した場合 C:\Windows\system32> whoami /groups | find "Mandatory Label" Mandatory Label\High Mandatory Level ラベル S-1-16-12288 !通常のコマンドプロンプトで実行した場合 C:\Users\username> whoami /groups | find "Mandatory Label" Mandatory Label\Medium Mandatory Level ラベル S-1-16-8192 !!!バッチファイルで、UAC昇格ダイアログ表示して管理者で実行する バッチファイルで管理者特権が必要なコマンドを実行する際に、ユーザーアカウント制御(UAC)の昇格ダイアログを表示して、コマンドを実行する。 runas コマンドは、実行ユーザを指定できるが、管理者特権へ昇格できない(*1)。 そのため、管理者特権で実行したい場合、事前に「管理者で実行」で実行するか、Power Shell の Start-Process や JScript/VBscript で ShellExecute を使用して昇格させる必要がある。 ※1:ビルドインユーザの Administrator であれば可能なようだが、Windows 10/11 ではデフォルトはアカウントが無効にされている。 powershell -command start-process cmd -verb runas CreateObject("Shell.Application").ShellExecute "cmd" "args" "", "runas", 1 !!昇格して自身を実行する @ECHO OFF REM 管理者特権が必要な処理を行うバッチ処理 REM 「管理者で実行」されなかった場合、昇格して実行する REM 管理者権限チェック openfiles > NUL 2>&1 IF ERRORLEVEL 1 ( ECHO 管理者権限で再実行します。 IF "X%1" == "X" ( powershell -Command Start-Process -FilePath \"%~f0\" -Verb RunAs ) ELSE ( powershell -Command Start-Process -FilePath \"%~f0\" -ArgumentList \"%*\" -Verb RunAs ) EXIT /B ) REM 以下、管理者権限で実行したい処理 ECHO 管理者権限で実行中 pause