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

Disabling allowance of Windows to save power for USB devices via batch loop

亲爱的, 我一直在努力研究如何禁用 Windows 的允许以节省 USB 阅读器的电量,最后使用 RegShot 我设法找到了负责这些设置的注册表输入,所以我设法创建两个正在扫描计算机的 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

End of search: 3 match(es) found.

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

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\IUSB3\ROOT_HUB30&22fe6fd&0\Device Parameters EnableSelectiveSuspend REG_DWORD 0x1

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\IUSB3\ROOT_HUB30&22fe6fd&0\Device Parameters EnableSelectiveSuspend REG_DWORD 0x1

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

End of search: 3 match(es) found.

现在,在我能够扫描这些位置并获取注册表路径之后,我想将它们中的每一个都设置为 0,因此我设法找到并使用了这个 .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

现在这就是我卡住的地方,我有两个 requests/questions 与 .bat 本身相关:

  1. REQ QUERY 中列出的每个项目都应使用 REG ADD 命令设置为 0 - 所以我认为这应该以某种方式循环?输出命令必须生成到 .reg 文件(下面的示例)
  2. 如何为 EnableSelectiveSuspend 添加第二个选项,有没有双循环的方法?

@@ EDIT.1 @@

事实证明,某些注册表项无法通过 .bat 更改(无法读取路径),因此应生成 .reg 文件:

正确的 .reg 文件示例:

Windows Registry Editor Version 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&32305751&0\Device Parameters] "EnableSelectiveSuspend"=dword:00000000

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

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

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

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

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

期待您的回答。

帕特里克

@@ 编辑 2 @@

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

@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

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

注册更新后 - 需要重新启动系统。

此文件添加了参数 "path",因此您应该 运行 此 .bat 带有参数,例如 "C:" 或任何其他路径。

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

@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 文件应用到更改。

注册更新后 - 需要重新启动系统。

此文件添加了参数 "path",因此您应该 运行 此 .bat 带有参数,例如 "C:" 或任何其他路径。