バッチファイルが管理者で起動されているかどうかを確認する

管理者のコマンドプロンプトでしか動かないバッチファイルの先頭で、ユーザーが管理者かどうかを確認する方法。コマンドとしては、

whoami /groups

で十分で、中に、BUILTIN\Administratorsとか、Mandatory Label\High Mandatory Levelがあることを確認すれば良い。で、バッチファイルで書くとどうすべきかという話。

@echo off

for /f "tokens=1 delims=," %%i in ('whoami /groups /FO CSV /NH') do (
	if "%%~i"=="BUILTIN\Administrators" set ADMIN=yes
	if "%%~i"=="Mandatory Label\High Mandatory Level" set ELEVATED=yes
)

if "%ADMIN%" neq "yes" (
	echo Administratorsグループに入ってないよ。
	exit /b 1
)
if "%ELEVATED%" neq "yes" (
	echo プロセスが昇格されてないよ。
	exit /b 2
)

REM 実際の処理を続ける
...

普段、forとか書いてないのと、%%~iにしないといけないので微妙にハマった・・・。