2015-10-12 2 views
0

Когда я запускаю команду REG Query HKLM /k /F "Command Processor" /s /e /c на ЦМД, я получаю этот результат:Пакетный ключ рег запрос переменной

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 

Когда я выполняю это, я получаю только последнюю строку:

Путь Значение строки «Результаты End: 2 матча (ы) (ы). "

Что не так? Я хотел бы получить ключи пути для переменных.

+0

Чтобы получить только первый путь, выходящий из цикла после установки пути с меткой 'goto done' и': done' в строке после цикла. – wOxxOm

+0

Это работает для первой линии, но мне также нужна вторая строка. – user3486019

ответ

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 

Это является своего рода массив MaPath1, MyPath2, и так далее, содержащий все соответствующие строки пути.

Команда findstr используется для отфильтровывания сводной строки End of search: (это может быть адаптировано в соответствии с языковым стандартом вашей системы/языком).

Обратите внимание, что массив не доступен после команды endlocal.

+0

Прекрасно подходит для двух экземпляров. Но если существует n строк в реестре, как я получаю результаты для (n-1) строк? Мне не нужна последняя строка «Конечные результаты: ....» – user3486019

+0

Это работает для * любого * количества строк; переменная 'count' содержит общее число ... – aschipfl

+0

Perfect. благодаря – user3486019

Смежные вопросы