【bat】powercfgコマンド完全ガイド|電源プラン切り替え・バッテリーレポート・スリープ設定・ハイバネーションをバッチで自動化

【bat】powercfgコマンド完全ガイド|電源プラン切り替え・バッテリーレポート・スリープ設定・ハイバネーションをバッチで自動化 bat

「ノートPCを持ち歩くときは省電力モードにしたい」「夜間バッチ処理中は高パフォーマンスに切り替えて、終わったら省電力に戻したい」——こういった電源管理の自動化を実現するのが powercfg(パワーシーエフジー)コマンドです。Windows Vista以降に標準搭載されており、GUIの電源オプション画面でできることのほぼすべてをコマンドラインから操作できます。

本記事では、powercfgの基本構文から電源プランの管理・切り替え・カスタム作成、バッテリーレポートの生成と活用、スリープ・ハイバネーションの詳細設定、AC/バッテリー状態の自動検出、電源診断レポートの活用まで、実際に動作するバッチスクリプトを使って徹底解説します。

本記事で分かること

  • powercfgコマンドの基本構文とサブコマンド一覧
  • 電源プランの確認・切り替え・カスタム作成の方法
  • バッテリーレポート(/batteryreport)の生成と活用
  • スリープ状態(S1〜S4)とハイバネーション・ハイブリッドスリープの設定
  • AC電源/バッテリー状態を検出して電源プランを自動切替
  • 電源診断レポート(/energy, /sleepstudy)の使い方
  • タスクスケジューラと連携した電源管理の自動化

管理者権限が必要なコマンドがあります
電源プランの作成・削除・スリープ設定の変更など、一部の操作は管理者権限(Administrator)が必要です。また、バッテリーレポートなどの読み取り専用コマンドは一般ユーザーでも実行できます。本記事では各コマンドの権限要件も明記します。

スポンサーリンク
  1. powercfgとは
  2. powercfgの基本構文とサブコマンド一覧
  3. 電源プランの確認と切り替え
    1. 電源プランの一覧を確認する
    2. 現在アクティブな電源プランを取得する
    3. 電源プランを切り替える
    4. プラン名でGUIDを取得して切り替える
  4. カスタム電源プランの作成と管理
    1. 電源プランを複製して作成する
    2. 電源プランをエクスポート・インポートする
  5. スリープ・ハイバネーション・ディスプレイ設定の変更
    1. スリープ設定を変更する
    2. setacvalueindex / setdcvalueindex で細かい設定を変更する
    3. ハイバネーション(休止状態)の有効化・無効化
  6. Windowsのスリープ状態の種類(S0〜S4)
  7. バッテリーレポートの生成と活用(/batteryreport)
    1. バッテリーレポートを生成する
    2. バッテリーの劣化率をスクリプトで取得する
  8. 電源診断レポート(/energy と /sleepstudy)
    1. /energy:電源効率診断レポート
    2. /sleepstudy:スリープ中の電力消費分析
  9. スリープを妨げているプロセス・デバイスの確認と制御
    1. 電源要求を確認する(/requests)
    2. ウェイクタイマーを確認する(/waketimers)
    3. スリープ復帰デバイスを管理する(deviceenablewake / devicedisablewake)
  10. 実践パターン:バッチで電源管理を自動化する
    1. パターン①:業務時間中は高パフォーマンス、それ以外は省電力
    2. パターン②:AC電源/バッテリー状態を検出して自動切替
    3. パターン③:バッチ処理前後でスリープを一時無効化・復元
    4. パターン④:バッテリー残量に応じて電源プランを動的に切替
    5. パターン⑤:定期バッテリーレポートの自動生成と保存
    6. パターン⑥:複数PC一括で電源プランを設定する
    7. パターン⑦:電源状態の変化をイベントログに記録する
    8. パターン⑧:新PC初期セットアップ時の電源設定スクリプト
  11. powercfgでよく発生するエラーと対処法
    1. エラー①:「指定されたスキームは存在しません」
    2. エラー②:「アクセスが拒否されました」
    3. エラー③:「このシステムはバッテリーをサポートしていません」
    4. エラー④:「高パフォーマンス」プランが一覧に表示されない
    5. エラー⑤:/change コマンドが効かない
    6. エラー⑥:スリープを無効化したはずなのに自動的にスリープに入る
    7. エラー⑦:/energy レポートで「エラーが発生しました。コマンドを実行できません」
  12. powercfgとPowerShellの使い分け
  13. よくある質問
  14. まとめ

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のメンテナンス管理に非常に役立ちます。

バッテリーレポートを生成する

batteryreport_generate.bat
@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から設計容量と現在の最大容量を抽出して、劣化率を計算するスクリプトです。

battery_health_check.bat
@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レポートにまとめます。

energy_report.bat
@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で、スリープ中の消費電力の変動を詳細に分析できます。

sleep_study_report.bat
@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"

実践パターン:バッチで電源管理を自動化する

パターン①:業務時間中は高パフォーマンス、それ以外は省電力

タスクスケジューラと組み合わせて、業務開始時に高パフォーマンスプランに切り替え、業務終了時に省電力プランに戻すスクリプトです。

power_plan_work.bat
@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アダプターの接続状態を自動検出し、接続中は高パフォーマンス、バッテリー時は省電力プランに切り替えます。

auto_power_plan.bat
@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がスリープしないように設定し、処理完了後に元の設定に戻すテンプレートです。

nosleep_while_batch.bat
@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

パターン④:バッテリー残量に応じて電源プランを動的に切替

バッテリー残量が少なくなったら自動的に省電力プランに切り替え、充電が完了したら高パフォーマンスに戻すスクリプトです。

battery_adaptive_plan.bat
@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

パターン⑤:定期バッテリーレポートの自動生成と保存

月次でバッテリーレポートを自動生成してフォルダに保存するスクリプトです。バッテリーの劣化トレンドを長期間追跡できます。

monthly_battery_report.bat
@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に同じ電源プランを一括適用するスクリプトです。

bulk_power_plan.bat
@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

管理者権限でのリモート実行については管理者権限の自動取得完全ガイドを参照してください。

パターン⑦:電源状態の変化をイベントログに記録する

電源プランの切替履歴を独自のログファイルに記録するスクリプトです。いつ、どのプランに切り替わったかを追跡できます。

power_plan_logger.bat
@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
Windowsイベントログから電源イベントを取得
@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をセットアップする際に、組織の標準電源設定を一括で適用するスクリプトです。

initial_power_setup.bat
@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 /requestspowercfg /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起動オーバーヘッドあり
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

よくある質問

Qpowercfg /setactive を実行してもプランが切り替わりません。
A管理者権限なしで実行している可能性があります。コマンドプロンプトを「管理者として実行」で開いてから実行してください。また、グループポリシーで電源プランが固定されている企業PCでは変更が反映されない場合があります。
Qバッテリーレポートを生成したら「このシステムはバッテリーをサポートしていません」と表示されます。
AデスクトップPCや仮想マシン(Hyper-V、VMware等)では /batteryreport は使用できません。ノートPC専用のコマンドです。電源効率の診断は /energy を使えばデスクトップでも実行できます。
Q電源プランのGUIDはPC間で同じですか?
AWindowsに標準搭載されているバランス・高パフォーマンス・省電力の3プランは共通のGUIDを持っています。ただし、PCメーカーが追加したOEM独自プランや、ユーザーが作成したカスタムプランのGUIDは環境ごとに異なります。スクリプトを別のPCに展開する前に powercfg /list で確認してください。
Qスリープを完全に無効化するにはどうすればよいですか?
Apowercfg /change standby-timeout-ac 0 および powercfg /change standby-timeout-dc 0 で有線・バッテリー時のスリープを無効化できます(0=しない)。ただし長時間の無効化はバッテリーの消耗・劣化を早めるため、バッチ処理終了後は必ず元の設定に戻すことをお勧めします。
Qバッテリーレポートの「設計容量」と「最大充電容量」の差が大きいのですが問題ありますか?
A最大充電容量が設計容量の80%を下回るとバッテリーが劣化しているサインです。70%以下になると体感できるほどバッテリー持ちが悪くなります。60%以下ではバッテリー交換を検討してください。定期的に /batteryreport でトレンドを記録することをお勧めします。
Q「究極のパフォーマンス」プランが表示されません。
A究極のパフォーマンスはWindows 10 バージョン1803以降のPro/Enterprise/Educationで利用できます。Homeエディションや古いバージョンでは利用不可です。powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61 を管理者権限で実行することで追加できます。
Qpowercfg /energy の実行が終わらないことがあります。
A/energy は既定で60秒間モニタリングします。/duration [秒] オプションで時間を変更できます(例: powercfg /energy /duration 5 で5秒)。
Qバッチ処理後にスリープ設定を元の値に戻したいのですが、元の値をどう保存しますか?
A最も簡単な方法は、スクリプト開始時に powercfg /export でプラン全体をファイルにエクスポートしておき、終了時に powercfg /import で復元する方法です。あるいは処理終了後に powercfg /setactive [元のプランGUID] でプランを再アクティブ化すると、そのプランのデフォルト値が復元されます。
Qスリープさせないでほしいのに勝手にスリープに入ります。スクリーンセーバーは無効にしています。
Apowercfg /requests を実行して、スリープを妨げているはずのプロセスが正常に要求を出しているか確認してください。また powercfg /waketimers でウェイクタイマーが意図せずスリープから復帰させていないかも確認します。グループポリシー(gpedit.msc)で電源管理が強制されている可能性もあります。
Qカバーを閉じたときにスリープにならないようにしたい。
Apowercfg /setacvalueindex または /setdcvalueindex でカバーアクション(LID action)を「何もしない(0)」に設定します。GUIDは「4f971e89-eebd-4455-a8de-9e59040e7347」(ボタンサブグループ)と「5ca83367-6e45-459f-a27b-476b1d01c936」(カバーを閉じたときの動作)です。値0が「何もしない」です。設定後は powercfg /setactive でプランを再アクティブ化してください。
Qpowercfg でCPUの最大クロックを制限できますか?
Aはい。/setacvalueindex で「プロセッサの最大状態」(GUID: bc5038f7-23e0-4960-96da-33abaf5935ec)の値を変更できます。値は0〜100(%)で指定します。例えば80にするとCPUの最大使用率が80%に制限されます。発熱を抑えたい場合やノートPCのバッテリー持ちを改善したい場合に有効です。
Qpowercfg /energy レポートに「プラットフォームタイマーの分解能が低い」と表示されます。
AこれはアプリケーションがWindows APIのtimeBeginPeriod()を呼び出して高精度タイマーを要求している状態です。特定のゲームやマルチメディアアプリが原因であることが多く、そのアプリを終了するか、Windowsの「タイマー解像度の改善」を無効にすることで解消できます。

まとめ

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一括セットアップなど、実務で役立つパターンを組み合わせて活用してください。