2012-04-27 71 views
4

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

REG HKLM \系统\ CurrentControlSet \服务\事件日志/ 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 

感谢您的任何提示。

回答

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没有任何好处。另外,如果代码中包含=,则代码不会保留整行,因为您使用该代码作为分隔符。

回答评论
如果你能依靠的事实,路径不包含任何空格,那么你可以简单地使用“标记= 3”,并保存%%一个。但我不相信这一点。相反,我会用

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 
+0

太棒了。谢谢。刚刚意识到我必须更进一步。可以说ImagePath是这样的: “C:\ Windows \ system32 \ services.exe”参数 – 2012-04-28 00:03:44

+0

@Neilw - 已更新的答案 – dbenham 2012-04-28 02:12:32