如何将REG值读入环境变量

4
我将尝试在BAT文件中将REG值读入环境变量。例如,
REG HKLM\SYSTEM\CurrentControlSet\Services\Eventlog /v ImagePath
我可以像这样将REG命令的整个输出字符串存入环境变量:
FOR /F "usebackq delims==" %%a in (`REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath`) DO set ImagePath=%%a

然而,这会将环境变量设置为整行文本,即:
ImagePath   REG_EXPAND_SZ   C:\Windows\system32\services.exe

我希望环境变量仅包含路径部分,即

C:\Windows\system32\services.exe

感谢任何技巧。

1个回答

7
for /f "tokens=2*" %%A in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath') DO set ImagePath=%%B

默认分隔符是空格和制表符,无需更改。TOKENS=2* 将第二个令牌存储在 %%A 中,将行的其余部分存储在 %%B 中。

关于你的原始代码-在你的情况下使用 USEBACKQ 没有任何好处。此外,如果行中包含 =,则你的代码将不会保留整个行,因为你将其用作分隔符。

对评论的回答
如果你可以信任路径不包含任何空格,则可以简单地使用“TOKENS=3”并保存 %%A。但我不会相信它。相反,我会使用

for /f "tokens=2*" %%A in ('REG QUERY "HKLM\SYSTEM\CurrentControlSet\Services\Eventlog" /v ImagePath') DO (
  for %%F in (%%B) do (
    set ImagePath=%%F
    goto :break
  )
)
:break

太棒了。谢谢。刚意识到我必须再往前一步。假设ImagePath是这样的:"C:\Windows\system32\services.exe" parameter - Neil Weicher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接