使用批处理,自动切换电源计划,自动切换休眠时间

1、打开命令提示符:

Win + R,输入 cmd,然后按 Enter

2、列出电源计划的GUID

powercfg /list

获取输出结果取下:

C:\Users\Administrator>powercfg /list

现有电源使用方案 (* Active)
-----------------------------------
电源方案 GUID: 381b4222-f694-41f0-****-ff5bb260df2e  (平衡)
电源方案 GUID: 8c5e7fda-e8bf-4a96-****-a6e23a8c635c  (高性能) *
电源方案 GUID: a1841308-3541-4fab-****-f71556f20b4a  (节能)
电源方案 GUID: e34effd5-6495-415f-****-7318bc95e92c  (卓越性能)

此处隐藏掉了部分数字,正常获取没有*
下面的示例代码同理,需要自行替换GUID

3、新建txt文件,重命名为 ModifyPowerPlan.bat,切记需要改文件后缀

批处理文件内容如:

当前bat文件的实现效果为: 每次双击执行文件,电源模式切换到性能模式,休眠时间在0分钟(永不休眠)和3分钟之间切换

@echo off
REM support chinese
chcp 65001
setlocal enabledelayedexpansion

REM 选择高性能或平衡模式
::set GUIDNAME=SCHEME_BALANCED
set GUIDNAME=SCHEME_MIN

REM key1:使计算机进入睡眠状态的时间
set key1=STANDBYIDLE
REM key2:关闭显示器的时间
set key2=VIDEOIDLE

REM 睡眠时间 0 或 3分钟
set time_choose1=0
set time_choose2=3

REM 调用函数并传递参数
set key=%key1%
call :GetAcPowerIndex %GUIDNAME% %key% %time_choose1% %time_choose2%
set key=%key2%
call :GetAcPowerIndex %GUIDNAME% %key% %time_choose1% %time_choose2%
pause
exit /b

REM 函数放在使用的后面
:GetAcPowerIndex
set highPerformanceGUID=8c5e7fda-e8bf-4a96-****-a6e23a8c635c
set balancedGUID=381b4222-f694-41f0-****-ff5bb260df2e
set setGUIDName=%~1
set setGUID=
set key=%~2
set lineCount=0
set outputLines=0
set acPowerIndex=

REM 检查GUID的模式
if "!setGUIDName!"=="SCHEME_MIN" (
    ::echo %setGUIDName% is SCHEME_MIN.
	echo 切换到高性能电源计划
	REM 保在设置变量时没有多余的空格
	set setGUID=%highPerformanceGUID%
) else (
    ::echo %setGUIDName% is SCHEME_BALANCED.
	echo 切换到平衡电源计划
	REM 保在设置变量时没有多余的空格
	set setGUID=%balancedGUID%
)
REM 切换到电源计划
powercfg /setactive %setGUID%

for /f "delims=" %%i in ('powercfg /query %highPerformanceGUID%') do (
    if !outputLines! lss 6 (
        echo %%i | findstr /i %key% >nul
        if not errorlevel 1 (
            set outputLines=0
            set lineCount=1
        ) else (
            if !lineCount! gtr 0 (
                ::echo %%i
                set /a outputLines+=1
                if !outputLines! equ 5 (
                    set acPowerIndex=%%i
                )
            )
        )
    )
)
for /f "tokens=2 delims=: " %%j in ("%acPowerIndex%") do (
    set acPowerIndexValue=%%j
)
REM 将十六进制转换为十进制
set /a decimalValue=0x!acPowerIndexValue:~2!
REM 除以 60
set /a result=decimalValue / 60

set target=
if !result! == %3 (
	echo %result% is equal to %3
	set target=%4
) else (
	if !result! == %4 (
		echo %result% is equal to %4
		set target=%3
	) else (
		echo Error: %result% is not equal %3 or %4
		exit /b 0
	)
)
echo change %key% value to %target%

if "!key!"=="STANDBYIDLE" (
    powercfg /change standby-timeout-ac !target%!
    echo %key% is STANDBYIDLE.
)

if "!key!"=="VIDEOIDLE" (
    powercfg /change monitor-timeout-ac !target!
    echo %key% is VIDEOIDLE.
)
goto:eof

4、自定义参数

(1)性能模式选择
REM 选择高性能或平衡模式
::set GUIDNAME=SCHEME_BALANCED
set GUIDNAME=SCHEME_MIN

行首的 :: 为注释,可以自行选择模式

(2)休眠时间设置
REM 睡眠时间 0 或 3分钟
set time_choose1=0
set time_choose2=3

休眠时间可以自行修改,单位分钟

5、执行效果

双击bat文件即可执行

控制台输出结果:
Active code page: 65001
切换到高性能电源计划
0 is equal to 0
change STANDBYIDLE value to 3
STANDBYIDLE is STANDBYIDLE.
切换到高性能电源计划
0 is equal to 0
change VIDEOIDLE value to 3
VIDEOIDLE is VIDEOIDLE.
Press any key to continue . . .

change STANDBYIDLE value to 3表示切换到3分钟休眠

Active code page: 65001
切换到高性能电源计划
3 is equal to 3
change STANDBYIDLE value to 0
STANDBYIDLE is STANDBYIDLE.
切换到高性能电源计划
3 is equal to 3
change VIDEOIDLE value to 0
VIDEOIDLE is VIDEOIDLE.
Press any key to continue . . .

change STANDBYIDLE value to 0表示切换到0分钟休眠(永不休眠)

posted @ 2024-11-01 21:52  Yzi321  阅读(534)  评论(0)    收藏  举报