Основываясь на решении tryToBeClever (на которое я случайно наткнулся и исправил методом проб и ошибок, прежде чем найти его), я также предлагаю пропустить вывод результата от reg query
до find
, чтобы отфильтровать нежелательные строки. из-за несоответствия ! REG.EXE VERSION x.y
. Фильтрация find
и настройка tokens
также позволяют выбрать именно то, что нам нужно (обычно это значение). Также добавлены кавычки, чтобы избежать неожиданных результатов с именами ключей / значений, содержащих пробелы.
Окончательный результат предлагается, когда мы заинтересованы только в получении значения:
@echo off
setlocal ENABLEEXTENSIONS
set KEY_NAME=HKCU\Software\Microsoft\Command Processor
set VALUE_NAME=DefaultColor
for /F "usebackq tokens=3" %%A IN (`reg query "%KEY_NAME%" /v "%VALUE_NAME%" 2^>nul ^| find "%VALUE_NAME%"`) do (
echo %%A
)
Возможное предостережение от использования find
заключается в том, что уровень ошибки, установленный reg
, при возникновении ошибок теперь скрывается, поэтому этот подход следует использовать только для ключей, о которых известно, что они существуют и / или после предыдущей проверки.
Небольшая дополнительная оптимизация (добавьте skip=1
, чтобы избежать обработки первой строки вывода) можно выполнить в тех случаях, когда имя ключа также содержит имя значения (как в случае HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
и CurrentVersion
) но устраняет большую гибкость, поэтому следует использовать только в конкретных случаях использования.