我正在尝试将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
但是,这会将环境变量设置为整行,即
ImagePath REG_EXPAND_SZ C:\Windows\system32\services.exe
我希望环境变量只包含路径部分,即
C:\Windows\system32\services.exe
感谢您的任何提示。
答案 0 :(得分: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