「ノートPCを持ち歩くときは省電力モードにしたい」「夜間バッチ処理中は高パフォーマンスに切り替えて、終わったら省電力に戻したい」——こういった電源管理の自動化を実現するのが powercfg(パワーシーエフジー)コマンドです。Windows Vista以降に標準搭載されており、GUIの電源オプション画面でできることのほぼすべてをコマンドラインから操作できます。
本記事では、powercfgの基本構文から電源プランの管理・切り替え・カスタム作成、バッテリーレポートの生成と活用、スリープ・ハイバネーションの詳細設定、AC/バッテリー状態の自動検出、電源診断レポートの活用まで、実際に動作するバッチスクリプトを使って徹底解説します。
本記事で分かること
- powercfgコマンドの基本構文とサブコマンド一覧
- 電源プランの確認・切り替え・カスタム作成の方法
- バッテリーレポート(/batteryreport)の生成と活用
- スリープ状態(S1〜S4)とハイバネーション・ハイブリッドスリープの設定
- AC電源/バッテリー状態を検出して電源プランを自動切替
- 電源診断レポート(/energy, /sleepstudy)の使い方
- タスクスケジューラと連携した電源管理の自動化
管理者権限が必要なコマンドがあります
電源プランの作成・削除・スリープ設定の変更など、一部の操作は管理者権限(Administrator)が必要です。また、バッテリーレポートなどの読み取り専用コマンドは一般ユーザーでも実行できます。本記事では各コマンドの権限要件も明記します。
powercfgとは
powercfgはWindowsの電源管理機能を制御するコマンドラインツールです。コントロールパネルの「電源オプション」に相当する機能をすべてコマンドから操作でき、バッチスクリプトによる自動化が可能です。
| 用途 | powercfg | コントロールパネル(GUI) |
|---|---|---|
| 電源プランの切り替え | ○ コマンド一発で切替 | ○ 手動でクリック |
| バッテリーレポート生成 | ◎ スクリプトで定期生成可 | △ 専用ツールが必要 |
| スリープ設定変更 | ○ バッチで変更・復元 | ○ 手動で設定 |
| 電源診断 | ◎ HTMLレポートを自動生成 | × 相当機能なし |
| タスクスケジューラ連携 | ◎ 定時に自動切替可能 | × 手動のみ |
| 複数PC一括管理 | ○ PsExecで遠隔実行可 | × 各PCで個別操作 |
特に威力を発揮するのは、業務の開始・終了に合わせた電源プランの自動切替や、ノートPCのバッテリー消耗を定期的に診断する仕組みの構築です。
powercfgの基本構文とサブコマンド一覧
powercfg [/オプション] [引数]
| サブコマンド | 説明 | 権限 |
|---|---|---|
/list または /l |
インストールされている電源プランを一覧表示 | 一般ユーザー |
/setactive または /s |
指定した電源プランに切り替える | 管理者 |
/getactivescheme |
現在のアクティブな電源プランを取得 | 一般ユーザー |
/duplicatescheme |
電源プランを複製して新しいプランを作成 | 管理者 |
/deletescheme |
電源プランを削除する | 管理者 |
/export |
電源プランをファイルにエクスポート | 一般ユーザー |
/import |
ファイルから電源プランをインポート | 管理者 |
/change |
電源設定の値を変更(スリープ時間など) | 管理者 |
/setacvalueindex |
AC接続時の特定設定をGUIDで細かく変更 | 管理者 |
/setdcvalueindex |
バッテリー時の特定設定をGUIDで細かく変更 | 管理者 |
/hibernate |
ハイバネーション(休止状態)の有効化・無効化 | 管理者 |
/availablesleepstates |
利用可能なスリープ状態を表示(S0〜S4) | 一般ユーザー |
/batteryreport |
バッテリーレポートをHTMLで生成 | 管理者 |
/energy |
電源診断レポートを生成(60秒間モニタリング) | 管理者 |
/sleepstudy |
スリープ中の電力消費レポートを生成 | 管理者 |
/requests |
電源要求(スリープを妨げているプロセス)を確認 | 管理者 |
/requestsoverride |
電源要求をオーバーライド(強制上書き) | 管理者 |
/waketimers |
システムをスリープから復帰させるタイマーを確認 | 一般ユーザー |
/devicequery |
ウェイクアップ対応デバイスの一覧を取得 | 一般ユーザー |
/deviceenablewake |
デバイスのウェイクアップ機能を有効化 | 管理者 |
/devicedisablewake |
デバイスのウェイクアップ機能を無効化 | 管理者 |
電源プランの確認と切り替え
まず最もよく使う電源プランの確認と切り替えから解説します。Windowsには標準で3つ(以上)の電源プランがあります。
| 電源プラン名 | GUID(一部) | 特徴 |
|---|---|---|
| バランス | 381b4222-… | パフォーマンスと省電力のバランス。デフォルト設定 |
| 高パフォーマンス | 8c5e7fda-… | 常に最大パフォーマンス。電力消費は多い |
| 省電力 | a1841308-… | 消費電力を最小化。バッテリー駆動時間を最長に |
| 究極のパフォーマンス | e9a42b02-… | Win10 Pro以降。遅延ゼロを目指す最大設定 |
電源プランの一覧を確認する
powercfg /list :: 出力例: :: 既存の電源設定 (* はアクティブな設定): :: :: 電源設定の GUID: 381b4222-f694-41f0-9685-ff5bb260df2e (バランス) * :: 電源設定の GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (高パフォーマンス) :: 電源設定の GUID: a1841308-3541-4fab-bc81-f71556f20b4a (省電力)
現在アクティブな電源プランを取得する
@echo off
setlocal enabledelayedexpansion
for /f "tokens=4" %%A in ('powercfg /getactivescheme') do (
set "ACTIVE_GUID=%%A"
)
for /f "tokens=4 delims=()" %%B in ('powercfg /getactivescheme') do (
set "ACTIVE_NAME=%%B"
)
echo 現在の電源プラン: !ACTIVE_NAME!
echo GUID: !ACTIVE_GUID!
endlocal
電源プランを切り替える
電源プランの切り替えには powercfg /setactive [GUID] を使います。GUIDの一部でも認識されます。
@echo off net session >nul 2>&1 if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 ) :: バランス(デフォルト)に切り替え powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e echo バランスプランに切り替えました :: 高パフォーマンスに切り替え :: powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c :: 省電力に切り替え :: powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a
GUIDは環境によって異なる場合があります
標準プランのGUIDは基本的に共通ですが、OEMカスタムプランや独自作成プランは環境ごとに異なります。powercfg /list で事前に確認してから使いましょう。
プラン名でGUIDを取得して切り替える
GUIDを直接書かず、プラン名からGUIDを検索して切り替える汎用的な方法です。
@echo off
setlocal enabledelayedexpansion
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set PLAN_NAME=高パフォーマンス
set TARGET_GUID=
for /f "tokens=4" %%A in ('powercfg /list ^| findstr /i "%PLAN_NAME%"') do (
set "TARGET_GUID=%%A"
)
if not defined TARGET_GUID (
echo [エラー] 電源プラン "%PLAN_NAME%" が見つかりません
exit /b 1
)
powercfg /setactive !TARGET_GUID!
if not errorlevel 1 (
echo [成功] %PLAN_NAME% プランに切り替えました
) else (
echo [エラー] 切り替えに失敗しました
)
endlocal
カスタム電源プランの作成と管理
標準プランを複製してカスタムプランを作成すると、スクリプト専用の設定を持った電源プランを管理できます。
電源プランを複製して作成する
@echo off
setlocal enabledelayedexpansion
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
:: 高パフォーマンスプランを複製してカスタムプランを作成
for /f "tokens=5" %%A in ('powercfg /duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c') do (
set "NEW_GUID=%%A"
)
if not defined NEW_GUID (
echo [エラー] プランの複製に失敗しました
exit /b 1
)
:: プラン名を変更(PowerShellを使用)
powershell -NoProfile -Command "powercfg /changename !NEW_GUID! '業務用高パフォーマンス' '業務時間中に自動切替されるカスタムプラン'"
echo [成功] カスタムプラン作成完了
echo GUID: !NEW_GUID!
endlocal
電源プランをエクスポート・インポートする
カスタムプランを他のPCに配布する場合はエクスポート/インポートを使います。
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
:: 現在のアクティブプランをエクスポート
for /f "tokens=4" %%A in ('powercfg /getactivescheme') do set "GUID=%%A"
powercfg /export "%~dp0custom_plan.pow" %GUID%
echo エクスポート完了: custom_plan.pow
:: インポート(別のPCで実行)
:: powercfg /import "%~dp0custom_plan.pow"
endlocal
スリープ・ハイバネーション・ディスプレイ設定の変更
powercfg /change を使うと、電源プランのスリープ時間やディスプレイオフまでの時間などを簡単に設定できます。より細かい設定には /setacvalueindex / /setdcvalueindex を使います。
| 設定項目 | コマンド引数 | 単位 | 0の意味 |
|---|---|---|---|
| ACプラグ時のスリープまでの時間 | standby-timeout-ac |
分 | スリープしない |
| バッテリー時のスリープまでの時間 | standby-timeout-dc |
分 | スリープしない |
| ACプラグ時のディスプレイオフまでの時間 | monitor-timeout-ac |
分 | オフにしない |
| バッテリー時のディスプレイオフまでの時間 | monitor-timeout-dc |
分 | オフにしない |
| ACプラグ時の休止状態までの時間 | hibernate-timeout-ac |
分 | 休止しない |
| バッテリー時の休止状態までの時間 | hibernate-timeout-dc |
分 | 休止しない |
| ディスクのアイドルオフまでの時間 | disk-timeout-ac |
分 | オフにしない |
スリープ設定を変更する
@echo off net session >nul 2>&1 if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 ) :: バッチ処理中はスリープさせない(0=スリープしない) powercfg /change standby-timeout-ac 0 powercfg /change standby-timeout-dc 0 powercfg /change monitor-timeout-ac 0 echo [設定] バッチ処理中: スリープ無効化しました :: ============ バッチ処理をここに記述 ============ :: 処理終了後に元の設定に戻す(30分スリープ) powercfg /change standby-timeout-ac 30 powercfg /change standby-timeout-dc 10 powercfg /change monitor-timeout-ac 15 echo [設定] バッチ処理終了: スリープ設定を復元しました
setacvalueindex / setdcvalueindex で細かい設定を変更する
/change で対応していない詳細設定は /setacvalueindex と /setdcvalueindex を使います。引数は [プランGUID] [サブグループGUID] [設定GUID] [値] の形式です。
よく使うGUIDの対応表
SUB_SLEEP= 238c9fa8-0aad-41ed-83f4-97be242c8f20(スリープ設定)HIBERNATE_AFTER= 9d7815a6-7ee4-497e-8888-515a05f02364(ハイバネーション移行時間)USBSETTING= 2a737441-1930-4402-8d77-b2bebba308a3(USB設定)LIDACTION= 5ca83367-6e45-459f-a27b-476b1d01c936(カバーを閉じたときの動作)
@echo off net session >nul 2>&1 if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 ) :: カバーを閉じたときの動作 :: 値: 0=何もしない, 1=スリープ, 2=休止状態, 3=シャットダウン set PLAN=381b4222-f694-41f0-9685-ff5bb260df2e set SUBGROUP=4f971e89-eebd-4455-a8de-9e59040e7347 set SETTING=5ca83367-6e45-459f-a27b-476b1d01c936 :: AC接続時: カバーを閉じても何もしない(0) powercfg /setacvalueindex %PLAN% %SUBGROUP% %SETTING% 0 :: バッテリー時: カバーを閉じたらスリープ(1) powercfg /setdcvalueindex %PLAN% %SUBGROUP% %SETTING% 1 :: 設定を反映(再度アクティブ化) powercfg /setactive %PLAN% echo カバーを閉じたときの動作を変更しました
ハイバネーション(休止状態)の有効化・無効化
ハイバネーションを無効化するとディスク容量を節約できます(hiberfil.sysが削除されます)。SSDのディスク容量が不足している場合に有効です。
@echo off net session >nul 2>&1 if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 ) :: ハイバネーション無効化(hiberfil.sysを削除してディスク容量を確保) powercfg /hibernate off echo ハイバネーションを無効化しました :: ハイバネーション有効化 :: powercfg /hibernate on :: 現在の状態を確認 powercfg /availablesleepstates
ハイバネーション無効化の注意点
- hiberfil.sysはRAMサイズと同等の容量(8GB RAMなら約8GB)が解放される
- ハイバネーションを無効にするとハイブリッドスリープも使えなくなる
- 「高速スタートアップ」機能もハイバネーションに依存しているため、無効化で起動がやや遅くなる場合がある
Windowsのスリープ状態の種類(S0〜S4)
Windowsのスリープには複数の状態(スリープステート)があります。powercfg /availablesleepstates でPCが対応しているステートを確認できます。
| スリープ状態 | 名称 | RAM保持 | 復帰速度 | 電力消費 | 特徴 |
|---|---|---|---|---|---|
| S0(CS) | モダンスタンバイ | ○ 保持 | 即時 | 非常に低い | スマートフォンのスタンバイ相当。Wi-Fiを維持してメール受信なども可能 |
| S1 | 軽スリープ | ○ 保持 | 非常に速い | 低い | CPUとメモリは維持。現代のPCではほぼ使われない |
| S2 | スリープ(上位) | ○ 保持 | 速い | 低い | S1より低消費。S1同様に現代PCではあまり見られない |
| S3 | スリープ(スタンバイ) | ○ 保持 | 数秒 | 低い | RAMには電力供給を維持。最も一般的なスリープ状態 |
| S4 | ハイバネーション(休止状態) | × 保持しない | 30秒〜1分 | ゼロ | RAMの内容をストレージに書き出してから完全に電源オフ |
powercfg /availablesleepstates :: 出力例(ノートPC): :: 次のスリープ状態は、このシステムで使用できます: :: スタンバイ (S3) :: 休止状態 :: ハイブリッド スリープ :: 高速スタートアップ :: :: 次のスリープ状態は、このシステムで使用できません: :: スタンバイ (S1) :: スタンバイ (S2) :: スタンバイ (S0 低電力アイドル)
モダンスタンバイ(S0)対応のPCは、スリープ中もバックグラウンドで通知を受け取ることができます。/sleepstudy レポートはS0対応PCで特に有用です。
バッテリーレポートの生成と活用(/batteryreport)
powercfg /batteryreport はバッテリーの使用履歴・充電サイクル数・設計容量と現在の最大容量を詳細なHTMLレポートとして生成します。バッテリーの劣化具合を数値で確認できるため、PCのメンテナンス管理に非常に役立ちます。
バッテリーレポートを生成する
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set REPORT_DIR=%~dp0battery_reports
set DATE_STR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set REPORT_FILE=%REPORT_DIR%\battery_report_%DATE_STR%.html
if not exist "%REPORT_DIR%" mkdir "%REPORT_DIR%"
powercfg /batteryreport /output "%REPORT_FILE%"
if not errorlevel 1 (
echo [成功] バッテリーレポートを生成しました
echo 保存先: %REPORT_FILE%
:: レポートをブラウザで開く
start "" "%REPORT_FILE%"
) else (
echo [エラー] レポート生成に失敗しました
echo ノートPC以外ではバッテリーレポートを生成できません
)
endlocal
バッテリーの劣化率をスクリプトで取得する
バッテリーレポートのHTMLから設計容量と現在の最大容量を抽出して、劣化率を計算するスクリプトです。
@echo off
setlocal enabledelayedexpansion
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set TEMP_REPORT=%TEMP%\battery_check_%RANDOM%.html
powercfg /batteryreport /output "%TEMP_REPORT%" >nul 2>&1
if errorlevel 1 (
echo [INFO] このPCはバッテリーを搭載していません
exit /b 0
)
:: PowerShellでバッテリー情報を取得
for /f %%A in ('powershell -NoProfile -Command "(Get-WmiObject Win32_Battery).DesignCapacity"') do set "DESIGN=%%A"
for /f %%B in ('powershell -NoProfile -Command "(Get-WmiObject Win32_Battery).FullChargeCapacity"') do set "FULL=%%B"
if defined DESIGN if defined FULL (
for /f %%C in ('powershell -NoProfile -Command "[math]::Round(%FULL%/%DESIGN%*100,1)"') do set "HEALTH=%%C"
echo バッテリー設計容量: %DESIGN% mWh
echo 現在の最大充電容量: %FULL% mWh
echo バッテリー健全性: !HEALTH!%%
if %FULL% LSS %DESIGN% / 2 (
echo [警告] バッテリーが大幅に劣化しています。交換を検討してください
)
) else (
echo バッテリー情報の取得に失敗しました
)
del /q "%TEMP_REPORT%" 2>nul
endlocal
バッテリーの健全性チェック結果をメール通知する方法はエラー通知メールを自動送信する完全ガイドを参考にしてください。
電源診断レポート(/energy と /sleepstudy)
powercfgには電源効率の問題を診断するための高度なレポート機能が2つあります。
/energy:電源効率診断レポート
powercfg /energy は60秒間システムを監視して、電源効率に関する問題点・警告・情報をHTMLレポートにまとめます。
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set REPORT_FILE=%~dp0energy_report_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.html
echo 60秒間モニタリング中... (他の作業はしないでください)
powercfg /energy /output "%REPORT_FILE%"
if not errorlevel 1 (
echo [完了] 電源診断レポートを生成しました: %REPORT_FILE%
start "" "%REPORT_FILE%"
) else (
echo [エラー] 診断レポートの生成に失敗しました
)
endlocal
/energyレポートで確認できる主な問題点:
- 電源ポリシーの問題: スリープを妨げている設定や非推奨の設定
- CPUの使用率: 使用率が高すぎてバッテリーを消耗しているプロセス
- プラットフォームタイマー: 短い間隔で割り込みを発生させているドライバー
- USB設定: 省電力設定が無効になっているUSBデバイス
- バッテリーの劣化: 最大充電容量が設計容量に対して大幅に低下
/sleepstudy:スリープ中の電力消費分析
powercfg /sleepstudy はモダンスタンバイ(Connected Standby)対応PCで、スリープ中の消費電力の変動を詳細に分析できます。
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set REPORT_FILE=%~dp0sleepstudy_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.html
powercfg /sleepstudy /output "%REPORT_FILE%"
if not errorlevel 1 (
echo [完了] スリープ分析レポートを生成しました: %REPORT_FILE%
start "" "%REPORT_FILE%"
) else (
echo このPCはモダンスタンバイ(Connected Standby)に対応していません
echo 代わりに /energy レポートを使用してください
)
endlocal
スリープを妨げているプロセス・デバイスの確認と制御
「PCがスリープに入らない」「スリープから意図せず復帰する」という問題を調べるためのコマンドを解説します。
電源要求を確認する(/requests)
アプリケーションやドライバーがスリープや画面オフを妨げている場合、/requests で確認できます。
powercfg /requests :: 出力例: :: DISPLAY: :: [DRIVER] \Driver\dxgkrnl :: An application is preventing ... :: :: SYSTEM: :: [DRIVER] ACPI x64-based PC :: ... :: :: None と表示された項目はスリープを妨げていない
ウェイクタイマーを確認する(/waketimers)
スリープから自動的に復帰させるタイマーが設定されている場合、/waketimers で確認できます。
powercfg /waketimers :: スリープ復帰できるデバイス一覧 powercfg /devicequery wake_armed :: 全デバイス(ウェイク対応)の一覧 powercfg /devicequery wake_programmable
スリープ復帰デバイスを管理する(deviceenablewake / devicedisablewake)
NICのRemote Wake-On-LANやUSBデバイスが意図せずスリープを解除する場合、/devicedisablewake で無効化できます。
@echo off net session >nul 2>&1 if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 ) :: ウェイク機能を無効化(スリープから勝手に復帰させないようにする) :: デバイス名は /devicequery wake_armed の出力から確認 powercfg /devicedisablewake "Realtek PCIe GbE Family Controller" echo NICのウェイクアップ機能を無効化しました :: ウェイク機能を有効化(Wake-on-LAN を使いたい場合) :: powercfg /deviceenablewake "Realtek PCIe GbE Family Controller" :: USB HIDデバイス(マウス・キーボード)のウェイク無効化 :: powercfg /devicedisablewake "USB Input Device"
実践パターン:バッチで電源管理を自動化する
パターン①:業務時間中は高パフォーマンス、それ以外は省電力
タスクスケジューラと組み合わせて、業務開始時に高パフォーマンスプランに切り替え、業務終了時に省電力プランに戻すスクリプトです。
@echo off
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
:: 引数で on/off を指定
if "%1"=="on" (
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
echo [%DATE% %TIME%] 業務開始: 高パフォーマンスプランに切り替えました
) else if "%1"=="off" (
powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a
powercfg /change standby-timeout-ac 20
powercfg /change monitor-timeout-ac 10
echo [%DATE% %TIME%] 業務終了: 省電力プランに切り替えました
) else (
echo 使い方: %~nx0 on (業務開始)
echo 使い方: %~nx0 off (業務終了)
)
タスクスケジューラでの登録方法はschtasksコマンドでタスクスケジューラを完全制御する完全ガイドを参照してください。
パターン②:AC電源/バッテリー状態を検出して自動切替
ノートPCでACアダプターの接続状態を自動検出し、接続中は高パフォーマンス、バッテリー時は省電力プランに切り替えます。
@echo off
setlocal enabledelayedexpansion
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
:: wmicでAC電源の接続状態を確認
:: BatteryStatus: 1=放電中(バッテリー), 2=AC接続
set "AC_STATUS="
for /f "skip=1 tokens=2 delims==" %%A in ('wmic path Win32_Battery get BatteryStatus /value 2^>nul') do (
set "AC_STATUS=%%A"
)
if not defined AC_STATUS (
echo [INFO] バッテリーなし(デスクトップPC)
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
goto :EOF
)
for /f "tokens=1" %%B in ("!AC_STATUS!") do set AC_STATUS=%%B
if "!AC_STATUS!"=="2" (
echo [AC接続] 高パフォーマンスプランに設定します
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /change standby-timeout-ac 0
) else (
echo [バッテリー駆動] 省電力プランに設定します
powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a
powercfg /change standby-timeout-dc 15
powercfg /change monitor-timeout-dc 5
)
endlocal
wmicコマンドの詳細はwmicコマンド完全ガイドも合わせて参照してください。
パターン③:バッチ処理前後でスリープを一時無効化・復元
長時間のバッチ処理中にPCがスリープしないように設定し、処理完了後に元の設定に戻すテンプレートです。
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
:: 現在のアクティブなプランGUIDを取得(処理後に復元するため)
for /f "tokens=4" %%A in ('powercfg /getactivescheme') do set "ORIG_PLAN=%%A"
echo 元のプラン: %ORIG_PLAN%
:: バッチ処理中はスリープ無効化
powercfg /change standby-timeout-ac 0
powercfg /change standby-timeout-dc 0
powercfg /change monitor-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
echo [設定] スリープを無効化しました
:: ============ 長時間バッチ処理 ============
echo バッチ処理開始: %DATE% %TIME%
:: ... ここにバッチ処理を記述 ...
ping -n 5 127.0.0.1 >nul
echo バッチ処理完了: %DATE% %TIME%
:: ==========================================
:: スリープ設定を元に戻す(プランを再アクティブ化して初期値に戻す)
powercfg /setactive %ORIG_PLAN%
echo [設定] スリープ設定を復元しました
endlocal
パターン④:バッテリー残量に応じて電源プランを動的に切替
バッテリー残量が少なくなったら自動的に省電力プランに切り替え、充電が完了したら高パフォーマンスに戻すスクリプトです。
@echo off
setlocal enabledelayedexpansion
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
:: バッテリー残量を取得
set "BATTERY_LEVEL="
for /f "skip=1 tokens=2 delims==" %%A in ('wmic path Win32_Battery get EstimatedChargeRemaining /value 2^>nul') do (
set "BATTERY_LEVEL=%%A"
)
if not defined BATTERY_LEVEL (
echo [INFO] バッテリー未搭載(デスクトップPC)
exit /b 0
)
for /f "tokens=1" %%B in ("!BATTERY_LEVEL!") do set BATTERY_LEVEL=%%B
echo バッテリー残量: !BATTERY_LEVEL!%%
if !BATTERY_LEVEL! LEQ 20 (
echo [省電力] バッテリー残量が 20%% 以下: 省電力プランに切り替えます
powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a
powercfg /change standby-timeout-dc 5
powercfg /change monitor-timeout-dc 2
) else if !BATTERY_LEVEL! LEQ 50 (
echo [バランス] バッテリー残量が 50%% 以下: バランスプランに維持します
powercfg /setactive 381b4222-f694-41f0-9685-ff5bb260df2e
) else (
echo [高パフォーマンス] バッテリー残量が十分: 高パフォーマンスプランを維持します
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
)
endlocal
パターン⑤:定期バッテリーレポートの自動生成と保存
月次でバッテリーレポートを自動生成してフォルダに保存するスクリプトです。バッテリーの劣化トレンドを長期間追跡できます。
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set REPORT_DIR=C:\BatteryReports
set YEAR_MONTH=%DATE:~0,4%-%DATE:~5,2%
set REPORT_FILE=%REPORT_DIR%\battery_%YEAR_MONTH%_%COMPUTERNAME%.html
if not exist "%REPORT_DIR%" mkdir "%REPORT_DIR%"
if exist "%REPORT_FILE%" (
echo [SKIP] 今月のレポートは既に生成済みです: %REPORT_FILE%
exit /b 0
)
powercfg /batteryreport /output "%REPORT_FILE%" /duration 30
if not errorlevel 1 (
echo [成功] バッテリーレポートを生成しました
echo ファイル: %REPORT_FILE%
for %%F in ("%REPORT_FILE%") do echo サイズ: %%~zF バイト
) else (
echo [エラー] レポート生成失敗(バッテリー未搭載の可能性)
)
endlocal
定期実行の登録方法はschtasksコマンドの完全ガイドを参照してください。実行結果のログ記録はバッチファイルでログを出力する完全ガイドも参考にしてください。
パターン⑥:複数PC一括で電源プランを設定する
リスト形式で複数のPCに同じ電源プランを一括適用するスクリプトです。
@echo off
setlocal enabledelayedexpansion
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
set PC_LIST=%~dp0pc_list.txt
set LOG=%~dp0power_plan_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log
set TARGET_GUID=a1841308-3541-4fab-bc81-f71556f20b4a
if not exist "%PC_LIST%" (
echo [エラー] pc_list.txt が見つかりません
exit /b 1
)
echo [%DATE% %TIME%] 電源プラン一括設定開始 >> "%LOG%"
for /f "usebackq eol=# tokens=1" %%P in ("%PC_LIST%") do (
echo %%P: 電源プランを設定中...
psexec \\%%P -s powercfg /setactive %TARGET_GUID% >nul 2>&1
if not errorlevel 1 (
echo [成功] %%P & echo [%DATE% %TIME%] %%P - 成功 >> "%LOG%"
) else (
echo [失敗] %%P & echo [%DATE% %TIME%] %%P - 失敗 >> "%LOG%"
)
)
echo 完了。ログ: %LOG%
endlocal
管理者権限でのリモート実行については管理者権限の自動取得完全ガイドを参照してください。
パターン⑦:電源状態の変化をイベントログに記録する
電源プランの切替履歴を独自のログファイルに記録するスクリプトです。いつ、どのプランに切り替わったかを追跡できます。
@echo off
setlocal enabledelayedexpansion
set LOG=%~dp0power_plan_history.log
:: 現在のプラン名を取得
set "PLAN_NAME="
for /f "tokens=4 delims=()" %%A in ('powercfg /getactivescheme 2^>nul') do (
set "PLAN_NAME=%%A"
)
if not defined PLAN_NAME set PLAN_NAME=不明
echo [%DATE% %TIME%] ホスト: %COMPUTERNAME% / プラン: !PLAN_NAME! / ユーザー: %USERNAME% >> "%LOG%"
endlocal
@echo off setlocal :: イベントID 105 = 電源プランの変更 :: イベントID 42 = スリープ開始 :: イベントID 107 = スリープ復帰 wevtutil qe System /q:"*[System[EventID=105]]" /f:text /c:5 /rd:true 2>nul echo. echo === 直近5件のスリープ開始イベント === wevtutil qe System /q:"*[System[EventID=42]]" /f:text /c:5 /rd:true 2>nul endlocal
ログの収集と管理についてはバッチファイルでログを出力する完全ガイドを参照してください。
パターン⑧:新PC初期セットアップ時の電源設定スクリプト
新しいPCをセットアップする際に、組織の標準電源設定を一括で適用するスクリプトです。
@echo off
setlocal
net session >nul 2>&1
if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 )
echo [%DATE% %TIME%] %COMPUTERNAME% 電源初期設定開始
:: 高パフォーマンスプランを有効化
powercfg /duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c >nul 2>&1
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
echo [1/6] 高パフォーマンスプランを設定
:: スリープ設定(AC接続時: 1時間、バッテリー: 20分)
powercfg /change standby-timeout-ac 60
powercfg /change standby-timeout-dc 20
echo [2/6] スリープ時間を設定
:: ディスプレイオフ設定(AC: 15分、バッテリー: 5分)
powercfg /change monitor-timeout-ac 15
powercfg /change monitor-timeout-dc 5
echo [3/6] ディスプレイオフ時間を設定
:: ハイバネーション無効化(SSDの容量節約)
powercfg /hibernate off
echo [4/6] ハイバネーションを無効化
:: NICの不意なウェイクアップを無効化
for /f "delims=" %%D in ('powercfg /devicequery wake_armed 2^>nul ^| findstr /i "Ethernet\|LAN\|Network"') do (
powercfg /devicedisablewake "%%D" >nul 2>&1
echo [5/6] ウェイク無効化: %%D
)
:: 電源ボタンの動作を「シャットダウン」に設定
set PLAN=8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
powercfg /setacvalueindex %PLAN% 4f971e89-eebd-4455-a8de-9e59040e7347 7648efa3-dd9c-4e3e-b566-50f929386280 3 >nul 2>&1
echo [6/6] 電源ボタンの動作を設定
powercfg /list
echo.
echo [完了] 電源設定の初期化が完了しました
endlocal
powercfgでよく発生するエラーと対処法
エラー①:「指定されたスキームは存在しません」
原因:指定したGUIDが間違っているか、そのプランが削除されている。
対処:powercfg /list で現在のGUID一覧を確認してから再実行してください。
エラー②:「アクセスが拒否されました」
原因:電源プランの変更は管理者権限が必要。
対処:コマンドプロンプトを「管理者として実行」で起動してください。
管理者権限の自動取得については管理者権限を自動取得する完全ガイドを参照してください。
エラー③:「このシステムはバッテリーをサポートしていません」
原因:デスクトップPCや仮想マシンで /batteryreport を実行した。
対処:/batteryreport はノートPC専用です。デスクトップでは /energy レポートを使用してください。
@echo off
wmic path Win32_Battery get Name 2>nul | findstr /v "^Name" | findstr /v "^$" >nul 2>&1
if errorlevel 1 (
echo このPCにはバッテリーがありません
) else (
echo バッテリーを搭載しています
)
エラー④:「高パフォーマンス」プランが一覧に表示されない
原因:Windows 10以降では「高パフォーマンス」プランが既定で非表示になっている場合がある。
対処:以下のコマンドで復元できます。
@echo off net session >nul 2>&1 if errorlevel 1 ( echo 管理者権限が必要です & exit /b 1 ) :: 高パフォーマンスプランの復元 powercfg -duplicatescheme 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c :: 究極のパフォーマンスプランの復元(Windows 10 1803以降) powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61 echo 電源プランを復元しました powercfg /list
エラー⑤:/change コマンドが効かない
原因:/change はアクティブな電源プランの設定を変更します。別のプランに切り替えると設定がリセットされます。
対処:変更したいプランをアクティブにしてから /change を実行するか、プランを切り替えた後に再度 /change で設定を適用してください。
エラー⑥:スリープを無効化したはずなのに自動的にスリープに入る
原因①:スクリーンセーバー設定が有効になっている(スクリーンセーバーはスリープとは別の設定)。
原因②:グループポリシーで電源設定が強制されている企業PC。
対処:powercfg /requests と powercfg /waketimers で妨げているプロセスを確認してください。
エラー⑦:/energy レポートで「エラーが発生しました。コマンドを実行できません」
原因:別のpowercfgプロセスが実行中か、Windows電源サービス(Power)が停止している。
対処:タスクマネージャーで powercfg.exe が起動中でないか確認し、電源サービスを再起動してください。
net stop Power net start Power
powercfgとPowerShellの使い分け
| 用途 | powercfg(バッチ) | PowerShell |
|---|---|---|
| 電源プランの切り替え | ◎ powercfg /setactive | ○ powercfg経由またはWMI |
| バッテリー残量取得 | △ wmic経由 | ◎ Get-WmiObject Win32_Battery |
| バッテリーレポート生成 | ◎ powercfg /batteryreport | ○ powercfg.exe経由 |
| 電源設定の詳細変更 | ◎ powercfg /change | △ レジストリ操作が必要 |
| 条件分岐処理 | △ 文字列解析が必要 | ◎ オブジェクト指向で扱いやすい |
| 複数PCの一括処理 | ○ forループで可能 | ◎ Invoke-Commandでより強力 |
| バッチとの組み合わせ | ◎ 直接呼び出し可能 | △ PowerShell起動オーバーヘッドあり |
@echo off
setlocal
:: バッテリー残量をPowerShellで取得
for /f %%A in ('powershell -NoProfile -Command "(Get-WmiObject Win32_Battery).EstimatedChargeRemaining"') do (
set "BATT=%%A"
)
if defined BATT (
echo バッテリー残量: %BATT%%%
) else (
echo バッテリー未搭載
)
endlocal
よくある質問
まとめ
powercfgコマンドを使えば、Windowsの電源管理機能のほぼすべてをバッチスクリプトから操作できます。GUIのクリック操作では実現できない「条件に応じた自動切替」や「定期的なバッテリー診断」が可能になります。
| よく使う操作 | コマンド |
|---|---|
| 電源プランの一覧確認 | powercfg /list |
| 現在のプランを確認 | powercfg /getactivescheme |
| 高パフォーマンスに切替 | powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c |
| 省電力に切替 | powercfg /setactive a1841308-3541-4fab-bc81-f71556f20b4a |
| スリープ無効化(AC) | powercfg /change standby-timeout-ac 0 |
| バッテリーレポート生成 | powercfg /batteryreport /output report.html |
| 電源診断レポート生成 | powercfg /energy /output energy.html |
| スリープを妨げるプロセス確認 | powercfg /requests |
| ウェイクタイマー確認 | powercfg /waketimers |
| ハイバネーション無効化 | powercfg /hibernate off |
| 利用可能なスリープ状態確認 | powercfg /availablesleepstates |
| デバイスのウェイク無効化 | powercfg /devicedisablewake "[デバイス名]" |
業務開始・終了に連動した電源プラン自動切替、ノートPCのバッテリー劣化の月次追跡、長時間バッチ処理中のスリープ防止、新PC一括セットアップなど、実務で役立つパターンを組み合わせて活用してください。

