如何将REG值读入环境变量

Nei*_*her 4 cmd batch-file environment-variables

我试图将REG值读入BAT文件中的环境变量.例如,

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
Run Code Online (Sandbox Code Playgroud)

但是,这会将环境变量设置为整行,即

ImagePath   REG_EXPAND_SZ   C:\Windows\system32\services.exe
Run Code Online (Sandbox Code Playgroud)

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

C:\Windows\system32\services.exe
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何提示.

dbe*_*ham 7

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

默认分隔符是空格和制表符; 无需改变它.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
Run Code Online (Sandbox Code Playgroud)