使用存储在变量中的键覆盖注册表值

时间:2019-01-29 00:04:17

标签: batch-file service registry

我正在尝试覆盖服务的注册表值,该服务在用户首次登录时保持“崩溃”。 故障排除后,我发现如果将服务启动时间从自动更改为手动,则可以解决此问题。 我正在尝试通过注册表批处理脚本来完成此任务。

变量BomgarService拥有键。我使用 reg查询来获取键名的原因是因为bomgar-scc-*之后的值是一个随机值,对于所有计算机而言都是不同的。

当我 echo 值时,它会打印正确的键,因此我知道我有正确的路径,但是我无法通过Reg Add传递该键变量。

我尝试使用以下所有失败的尝试来传递变量。

  • %BomgarService%
  • "\"%%BomgarService%%\""
  • ^"^%BomgarService^%^"

这是我的代码:

@echo off
setlocal

::Get the path of the bomgar service and set it to our variable 
"BomgarService"
set "BomgarService=reg query HKLM\SYSTEM\ControlSet001\Services /K /F 
bomgar-scc /S | find "HKEY_LOCAL_MACHINE""

%BomgarService%

REG ADD ^"^%BomgarService^%^" /v "Start" /t REG_DWORD /d 3 /f

pause

输出:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\bomgar-scc-5C4F6978
ERROR: Invalid key name.
Type "REG ADD /?" for usage.
Press any key to continue . . .

1 个答案:

答案 0 :(得分:0)

我相信您的问题是您正试图转义引号和字符串。您需要引用字符串。贝娄是我对此进行测试的示例。

Set "Test=HKEY_LOCAL_MACHINE\Software\NewKey"

reg.exe add "%Test%" /v "Start" /t REG_DWORD /d 3 /f

输出:

The operation completed successfully.
Press any key to continue . . .

编辑:

重新检查脚本后,您似乎正在尝试将实际命令设置为字符串。您可以使用for循环从波纹管中提取该命令的结果。

for /f "tokens=*" %%A in ('reg query HKLM\SYSTEM\ControlSet001\Services /K /F bomgar-scc /S^| find /V "End of search"') do (
    Set "BomgarService=%%A"
)

echo %BomgarService%

请记住,我尚未测试您的reg命令,并且不知道其结果。如果它已经完成了您想要的操作,它将输出以下命令的结果并将结果设置为字符串。在添加注册表之前,请先试玩一下以确保它可以显示您想要的内容。