批量注册查询键到变量

时间:2015-10-12 20:39:04

标签: windows batch-file cmd prompt

当我在REG Query HKLM /k /F "Command Processor" /s /e /c上运行命令cmd时,我得到了这个结果:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Command Processor

结束结果:找到2场比赛。

但是批量生产:

@echo off & setlocal ENABLEEXTENSIONS
for /f "tokens=*" %%a in ('REG Query HKLM /k /F "Command Processor" /s /e /c') do set "MyPath=%%a"
echo The path string value is "%MyPath%"
pause

当我执行此操作时,我只得到最后一行:

路径字符串值为"最终结果:找到2个匹配。"

有什么问题?我想获取变量的路径键。

1 个答案:

答案 0 :(得分:2)

问题很明显:您在MyPath循环中覆盖for /F的值,然后打印(echo最终值/线。

要获取所有行(任意数字),您可以执行以下操作:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem storing the path strings in `MyPath1`, `MyPath2`, etc.:
set /A count=0
for /F "delims=" %%A in (
    'REG Query HKLM /K /F "Command Processor" /S /E /C ^
    ^| findstr /L /B /V /C:"End of search: "'
) do (
    set /A count+=1
    set "MyPath!count!=%%A"
)
rem extracting the previously stored path strings:
echo Total number of path strings: %count%
for /L %%B in (1,1,%count%) do (
    echo The !count!. path string value is "!MyPath%%B!"
)
pause
endlocal

这构成了一种数组MaPath1MyPath2,依此类推,包含所有匹配的路径字符串。

findstr命令用于过滤掉汇总行End of search:(可能会根据您的系统区域设置/语言进行调整)。

请注意,在endlocal命令后,该阵列不再可用。