禁用Windows允许通过批处理循环为USB设备节电

Dears,我一直在努力如何禁用Windows为USB读取器节省电力的津贴,最后与RegShot我设法find负责这些设置的registryinput,所以我设法创build两个reg扫描计算机的查询

REG QUERY HKLM /v SelectiveSuspendFeatureOn /s REG QUERY HKLM /v EnableSelectiveSuspend /s 

示例输出:

C:\ Users \ asd \ Desktop> REG QUERY HKLM / v SelectiveSuspendFeatureOn / s

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ GemCCID SelectiveSuspendFeatureOn REG_DWORD 0x1

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet002 \ services \ GemCCID SelectiveSuspendFeatureOn REG_DWORD 0x1

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ GemCCID SelectiveSuspendFeatureOn REG_DWORD 0x1

search结束:find3个匹配的结果。

C:\ Users \ asd \ Desktop> REG QUERY HKLM / v EnableSelectiveSuspend / s

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Enum \ IUSB3 \ ROOT_HUB30 \ 4&22fe6fd&0 \ Device参数EnableSelectiveSuspend REG_DWORD 0x1

HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet002 \ Enum \ IUSB3 \ ROOT_HUB30 \ 4&22fe6fd&0 \ Device参数EnableSelectiveSuspend REG_DWORD 0x1

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ IUSB3 \ ROOT_HUB30 \ 4&22fe6fd&0 \ De vice参数EnableSelectiveSuspend REG_DWORD 0x1

search结束:find3个匹配的结果。

所以,现在我能够扫描这些地方,并获得registrypath后,我想把它们都设置为0,所以我设法find并使用这个.bat:

 @echo off cls :startreg cls set regq= REG QUERY HKLM /v SelectiveSuspendFeatureOn /s %curuser% for /f "tokens=* delims=~" %%A IN ('%regq% ^| findstr /i "HKEY_LOCAL_MACHINE"') DO set regkey=%%A Reg add %regkey% /v SelectiveSuspendFeatureOn /t REG_DWORD /d 0 /f rem Reg add %regkey% /v EnableSelectiveSuspend /t REG_DWORD /d 0 /f pause exit 

现在这是我卡住的地方,我有两个与.bat本身相关的请求/问题:

  1. REQ QUERY中的每个列出的项目都应该用REG ADD命令设置为0 – 所以我相信这应该是循环的? 输出命令必须生成.reg文件(下面的例子)
  2. 如何为EnableSelectiveSuspend添加第二个选项,是否有双重循环的方法?

@@ EDIT.1 @@

原来,有些registry键不能通过.bat(path不能被读取)来改变,所以应该生成.reg文件:

正确.reg文件的示例:

Windowsregistry编辑器版本5.00

[HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ GemCCID]“SelectiveSuspendFeatureOn”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet004 \ services \ GemCCID]“SelectiveSuspendFeatureOn”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ GemCCID]“SelectiveSuspendFeatureOn”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet004 \ Enum \ IUSB3 \ ROOT_HUB30 \ 4&32305751&0 \ Device Parameters]“EnableSelectiveSuspend”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet004 \ Enum \ USB \ VID_0424&PID_2512 \ 5&36b4634f&0&3 \ Device Parameters]“EnableSelectiveSuspend”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet004 \ Enum \ USB \ VID_0424&PID_2514 \ 6&234568e7&0&1 \ Device Parameters]“EnableSelectiveSuspend”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ IUSB3 \ ROOT_HUB30 \ 4&32305751&0 \ Device Parameters]“EnableSelectiveSuspend”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB \ VID_0424&PID_2512 \ 5&36b4634f&0&3 \ Device Parameters]“EnableSelectiveSuspend”= dword:00000000

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ USB \ VID_0424&PID_2514 \ 6&234568e7&0&1 \ Device Parameters]“EnableSelectiveSuspend”= dword:00000000

期待您的答案。

Patryk

@@ EDIT 2 @@

我设法创build了我需要的逻辑:

 @echo off cls :startreg cls echo Scanning computer in order to apply Power Managment adjustments for USB readers set NLM=^ set NL=^^^%NLM%%NLM%^%NLM%%NLM% echo Windows Registry Editor Version 5.00 > %1/scanned.reg echo. >> %1/scanned.reg set regq= REG QUERY HKLM /v SelectiveSuspendFeatureOn /s %curuser% for /f "tokens=* delims=\\n" %%A IN ('%regq% ^| findstr /i "HKEY_LOCAL_MACHINE"') DO echo [%%A] >> %1/scanned.reg & echo "SelectiveSuspendFeatureOn"=dword:00000000 >> %1/scanned.reg & echo. >> %1/scanned.reg set regq= REG QUERY HKLM /v EnableSelectiveSuspend /s %curuser% for /f "tokens=* delims=\\n" %%A IN ('%regq% ^| findstr /i "HKEY_LOCAL_MACHINE"') DO echo [%%A] >> %1/scanned.reg & echo "EnableSelectiveSuspend"=dword:00000000 >> %1/scanned.reg & echo. >> %1/scanned.reg regedit.exe /S %1/scanned.reg exit 

所以这个是扫描Windowsregistry,然后将这些值保存为.reg密钥,并最终运行.reg文件来应用更改。

注册udpates后 – 需要重新启动系统。

这个有一个参数“path”添加,所以你应该运行这个.bat参数例如“C:”或任何其他path。

我设法创建了我需要的逻辑:

 @echo off cls :startreg cls echo Scanning computer in order to apply Power Managment adjustments for USB readers echo Windows Registry Editor Version 5.00 > %1/scanned.reg echo. >> %1/scanned.reg set regq= REG QUERY HKLM /v SelectiveSuspendFeatureOn /s %curuser% for /f "tokens=* delims=\\n" %%A IN ('%regq% ^| findstr /i "HKEY_LOCAL_MACHINE"') DO echo [%%A] >> %1/scanned.reg & echo "SelectiveSuspendFeatureOn"=dword:00000000 >> %1/scanned.reg & echo. >> %1/scanned.reg set regq= REG QUERY HKLM /v EnableSelectiveSuspend /s %curuser% for /f "tokens=* delims=\\n" %%A IN ('%regq% ^| findstr /i "HKEY_LOCAL_MACHINE"') DO echo [%%A] >> %1/scanned.reg & echo "EnableSelectiveSuspend"=dword:00000000 >> %1/scanned.reg & echo. >> %1/scanned.reg regedit.exe /S %1/scanned.reg exit 

所以这个是扫描Windows注册表,然后将这些值保存为.reg密钥,并最终运行.reg文件来应用更改。

注册udpates后 – 需要重新启动系统。

这个有一个参数“路径”添加,所以你应该运行这个.bat参数例如“C:”或任何其他路径。