【问题标题】:Using Batch file to change various settings in Windows Control Panel [closed]使用批处理文件更改 Windows 控制面板中的各种设置 [关闭]
【发布时间】:2017-01-08 20:38:08
【问题描述】:

我正在寻找如何通过使用批处理文件(不带 powershell)在运行 Windows 7 的计算机上对 Windows 控制面板设置进行多项更改。

需要的设置是:

在 PowerCFG 面板中:

  • AC 上的监视器超时(切换到禁用)
  • AC 上的 HDD 超时(切换到禁用)
  • AC 待机超时(切换到禁用)
  • AC 上的休眠超时(切换到禁用)
  • 硬件电源按钮的操作(切换到禁用)

在开始菜单面板中:

  • 关机按钮的操作(切换到更改用户)

我已经尝试过这个脚本:

@Echo Off
POWERCFG /CHANGE monitor-timeout-ac 0
POWERCFG /CHANGE disk-timeout-ac 0
POWERCFG /CHANGE standby-timeout-ac 0
POWERCFG /CHANGE hibernate-timeout-ac 0
exit

但我没有找到如何获取其他设置。

谢谢转发

【问题讨论】:

  • 请注意stackoverflow.com 不是免费的脚本/代码编写服务。如果您告诉我们到目前为止您已经尝试过什么(包括您已经在使用的脚本/代码)以及您遇到的问题,那么我们可以尝试帮助解决具体问题。您还应该阅读How do I ask a good question?
  • @JoeWright 你能解决问题吗?

标签: windows batch-file control-panel


【解决方案1】:

在向您解释我的解决方案之前,我建议您复制当前的电源方案并使用该副本,而不是更改当前的方案。当前方案可能是默认方案,并且在没有备份的情况下进行更改有时是有风险的。撤消配置更改并不总是那么容易。

我有 2 个解决方案想与您分享。第一个提出了硬件电源按钮的解决方案。它也可能是开始菜单中关闭的解决方案,但我无法将其设置为“更改用户”。但是,我只在 Windows 10 机器上对其进行了测试(我没有 Windows 7 机器可以对其进行测试),因此它甚至可能适用于 Windows 7 上的开始菜单按钮(有人可以确认吗?)。问题是,Windows 10 开始菜单中的关机按钮似乎与 Windows 7 中的不太一样(Windows 10 的开始菜单中有 2 个单独的按钮:一个用于注销和切换用户,一个用于用于关机、睡眠和重启;Windows 7 的所有选项都有一个按钮)。
第二个解决方案是开始菜单中的第二个关闭选项,它肯定适用于 Windows 7(我前段时间使用过)。
两种解决方案都可能需要重新启动,尤其是第一个解决方案.

  1. 实际上,您可以使用powercfg 更改更多设置,然后使用/CHANGE(或-change-x)标志可用的设置。硬件电源按钮就是其中之一。开始菜单中还有一个关机按钮的设置,但我不确定它是否有帮助。无论如何,要检查您可以更改的电源方案的所有设置,您需要电源方案的 GUID(一个 36 个字符长的 ID)。 powercfg 始终为您提供使用别名而不是 GUID 的可能性。您可以选择,但 GUID 具有特定的形式,使其更易于在脚本中使用(可能在某些情况下除外)。别名更容易阅读、理解和记忆。

    要搜索方案的 GUID,您可以使用:powercfg -list,它将为每个电源方案打印Power Scheme GUID: <GUID> (<NAME POWER SCHEME>) 形式的字符串(名称与别名不同)。然后,您可以使用findstr 选择特定的电源方案名称(或仅powercfg -getactivescheme 仅用于活动方案)并使用FOR /F 来提取GUID,如下所示:

    FOR /F "tokens=4" %%G IN ('powercfg /getactivescheme') DO set activeschemeGUID=%%G
    

    获得 GUID(或别名)后,您可以使用以下命令检查其整个配置:

    powercfg -q <Scheme_GUID>
    

    powercfg -q(或powercfg -q %activeschemeGUID%,带有第一个代码示例中的变量)将为您提供 GUID、别名和(一长串)您可以更改的活动方案的所有设置以及它们可以采用的值(在powercfg 他们实际上将其命名为值索引而不是值)。
    设置按子组分组。每个子组和设置都有一个 GUID。最常见的子组和设置甚至有别名。要检查设置和子组的所有可用别名,您可以使用powercfg -aliases。您将需要 GUID(或别名,如果可用)来检查设置可以采用哪些值及其当前值:

    powercfg -q <Scheme_GUID> <SUB_GUID> <Setting_GUID>
    

    或更改其值:

    powercfg -setacvalueindex <Scheme_GUID> <SUB_GUID> <Setting_GUID> <New_value_index> 
    powercfg -setdcvalueindex <Scheme_GUID> <SUB_GUID> <Setting_GUID> <New_value_index>
    

    第一个将更改 AC 值索引,第二个将更改 DC(如果可用,请检查设置的值)。

    您现在唯一需要的是设置正确的 GUID(或别名,如果可用)。 我会为您节省搜索时间,并为您提供我身边的 GUID。它们应该是默认值,但您始终可以通过在所有可用设置中搜索字符串“power”(不区分大小写的搜索)来查找它们。开始菜单中的硬件电源按钮操作设置和关机按钮操作设置都属于同一个子组:别名为SUB_BUTTONS 和GUID 4f971e89-eebd-4455-a8de-9e59040e7347 的子组。硬件按钮具有别名 PBUTTONACTION 和 GUID 7648efa3-dd9c-4e3e-b566-50f929386280。开始按钮具有别名 UIBUTTON_ACTION 和 GUID a7066653-8d6c-40a8-910e-a1f54b84c7e5。您可以使用powercfg -aliases 在命令行上检查它们。
    在更改设置之前,请检查它们可以在命令行上采用哪些索引:

    powercfg -q %activeschemeGUID% SUB_BUTTONS PBUTTONACTION
    powercfg -q %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION
    

    如果这不起作用,您应该尝试使用 GUID 而不是别名,或者尝试为您的配置查找正确的 GUID/别名。 在查看所需的值索引后,您可以更改设置。就我而言,禁用硬件电源按钮的索引为 0。因此分别更改 AC 和 DC 是:

    powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
    powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
    

    不幸的是,我没有UIBUTTON_ACTION 的注销选项。所以我不能给你看那个,但它的原理是一样的。这也是为什么我不确定UIBUTTON_ACTION 是否能在开始菜单中发挥作用的原因。

  2. 对于开始菜单中的关机按钮,我知道windows 7还有另一个选项:更改位于HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced的注册表Start_PowerButtonAction。我警告你:更改注册表是微妙的,不是很好的做法,但有时它是更改某些配置的唯一方法。我不确定,但它可能还需要管理员权限,因此可能需要以管理员身份运行(有人可以确认这一点吗?)。
    这些是注册表可以采用的十六进制值:

    Action           Value
    ------------  --------
    Change User        100
    Log Off              1
    Lock               200
    Restart              4
    Sleep               10
    Hibernate           40
    Shutdown             2
    

    您可以使用regedit GUI 来检查注册表的当前值。或者使用reg 在命令行上检查该值(EDIT:在reg 中使用HKCU 而不是HKEY_CURRENT_USER):

    reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction
    

    在您检查注册表存在并且具有与您的开始菜单关闭按钮相对应的值后,您可以对其进行修改。但在修改任何注册表之前,请确保back-up the registry with regeditthis official Windows link 也提供帮助)以防出现问题。
    要修改注册表Start_PowerButtonAction 并将“更改用户”设置为批量操作,您可以使用:

    reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction /t REG_DWORD /d 100 /f
    

    如果它不存在,您可以使用相同的命令创建它并尝试一下。如果它不起作用,请使用备份至少恢复HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 密钥。

测试后,您可以在批处理脚本中添加这些命令。最终脚本如下所示:

@echo off
SetLocal

REM Get GUID of current power scheme
FOR /F "tokens=4" %%G IN ('powercfg /getactivescheme') DO set activeschemeGUID=%%G

REM Custom power scheme name
set custom_name=CUSTOM_POWER_SCHEME_STACK

REM Check if it already exists and if it exists, get its GUID
FOR /F "tokens=4" %%G IN ('powercfg -list ^| find "%custom_name%"') DO (
    REM custom power scheme with that name already exists
    set custom_GUID=%%G
    goto :SetCustomActive
)

REM Here we're sure it doesn't exist: copy current active scheme and get GUID of that copy
FOR /F "tokens=4" %%G IN ('powercfg -DUPLICATESCHEME %activeshcemeGUID%') DO et custom_GUID=%%G

REM change the name of the new scheme (the copy) to the custom name
powercfg -CHANGENAME %custom_GUID% %custom_name%

:SetCustomActive
powercfg -SETACTIVE %custom_GUID%
set activeschemeGUID=%custom_GUID%

REM Your code
POWERCFG /CHANGE monitor-timeout-ac 0
POWERCFG /CHANGE disk-timeout-ac 0
POWERCFG /CHANGE standby-timeout-ac 0
POWERCFG /CHANGE hibernate-timeout-ac 0

REM change the power button
powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000
powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS PBUTTONACTION 000

REM Change the start menu button (replace with powercfg method below if available)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v Start_PowerButtonAction /t REG_DWORD /d 100
REM powercfg -setacvalueindex %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION ???
REM powercfg -setdcvalueindex %activeschemeGUID% SUB_BUTTONS UIBUTTON_ACTION ???

EndLocal
exit /b 0

PS:对于重新启动,您可以在脚本末尾的 exit 之前添加 shutdown 命令:

SHUTDOWN.exe /r /f /t 60 /d P:2:4

将在 60 秒后重新启动,原因是:“操作系统:重新配置(已计划)”。请参阅this link 了解更多信息。

PPS:如果您使用注册表解决方案,您可以在脚本开头使用以下命令检查脚本是否以管理员权限运行(如果需要管理员权限):

openfiles > NUL 2>&1 
if %ERRORLEVEL% NEQ 0 (
    REM Command failed => no admin rights
    echo This executable requires admin-rights!
    exit /b 1
)

openfiles 是一个始终需要管理员权限的命令。如果失败,您就知道该脚本尚未以管理员身份运行。

【讨论】:

  • 感谢 J.Baoby 的这门课程,我得到了我想要的东西,并且学到了一些我不知道的东西
  • 不客气 :-) 是否按预期工作?
  • 我刚刚进行了编辑:最好使用HKCU 而不是HKEY_CURRENT_USER。我错过了这一点。我的道歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
相关资源
最近更新 更多