バッチファイルで管理者権限が必要な処理を行う際の方法を解説します。UAC昇格・runas・自己昇格バッチの3つのアプローチを紹介します。
管理者権限が必要な場面
- システムフォルダ(C:\Windows等)へのファイル書き込み
- レジストリのHKEY_LOCAL_MACHINEへの書き込み
- サービスの起動・停止・インストール
- ネットワークドライブのシステム全体への割り当て
- Windowsの設定変更(ファイアウォール等)
管理者権限で実行されているか確認する
@echo off
:: net session で管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% NEQ 0 (
echo このバッチは管理者権限が必要です。
echo 右クリック→「管理者として実行」で実行してください。
pause
exit /b 1
)
echo 管理者権限で実行中です。
echo 処理を開始します...runasコマンドで管理者として実行
@echo off
:: 別のユーザーとして実行(パスワード入力が必要)
runas /user:Administrator "cmd /c C:\Scripts\admin_task.bat"
:: ドメイン環境の場合
runas /user:DOMAIN\AdminUser "cmd /c C:\Scripts\admin_task.bat"自己昇格バッチ(UAC昇格を自動でリクエスト)
@echo off
:: 管理者権限チェック
net session >nul 2>&1
if %ERRORLEVEL% EQU 0 goto :admin_ok
:: 管理者権限がない場合→UACダイアログを出して自分自身を再実行
echo 管理者権限で再起動します...
powershell -Command "Start-Process cmd -ArgumentList '/c %~dpnx0' -Verb RunAs"
exit /b 0
:admin_ok
:: ここから管理者権限で実行される処理を書く
echo 管理者権限で実行中!
:: 例: サービスの停止
net stop Spooler
echo Spoolerサービスを停止しました
pause方法の比較
| 方法 | 特徴 | 向いている場面 |
|---|---|---|
| 右クリック→管理者として実行 | 手動・シンプル | 自分で使うスクリプト |
| runas コマンド | 特定ユーザーとして実行 | 別アカウントの権限が必要な場合 |
| 自己昇格バッチ | 自動でUACダイアログを表示 | 一般ユーザーが使うツール |
まとめ
- net session でバッチが管理者権限で動いているかチェックできる
- runasで特定ユーザーとしてコマンドを実行できる
- PowerShell経由のStart-Process -Verb RunAsで自己昇格が実現できる
- セキュリティ上、必要な箇所だけ管理者権限を使うのが基本
- 次の記事ではファイル検索・テキスト処理を学ぶ


コメント