Как прочитать значение REG в переменной окружения

Я пытаюсь прочитать значение REG в переменной среды в файле BAT. Например.,

РЕГ 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

Спасибо за любые советы.


person Neil Weicher    schedule 27.04.2012    source источник


Ответы (1)


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» и сэкономить% % А. Но я бы этому не поверил. Вместо этого я бы использовал

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
person dbenham    schedule 27.04.2012
comment
Потрясающие. Спасибо. Только что понял, что нужно сделать еще один шаг вперед. Допустим, ImagePath это: параметр C: \ Windows \ system32 \ services.exe - person Neil Weicher; 28.04.2012