Чтение данных из реестра в переменную окружения

Продвинутый кросплатформенный модуль для встраивания в скрипты, позволяющий в удобной форме получать данные из реестра для дальнейшего использования(как всегда - кодировка скрипта CP866):

@ECHO OFF
CLS
:: 1-й параметр = раздел реестра для чтения
:: 2-й параметр = имя считываемого параметра - указать пустые кавычки для чтения параметра "По умолчанию"
:: 3-й параметр = имя переменной окружения куда считываем результат
:: Пример чтения именованного параметра:
CALL :REG_READ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "USERINIT" "MY_VAR1"
ECHO Именованный параметр значение "%MY_VAR1%"
ECHO Именованный параметр тип "%MY_VAR1_TYPE%"
:: Пример чтения безымянного параметра "По умолчанию"
CALL :REG_READ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "" "MY_VAR2"
ECHO Параметр "По умолчанию" значение "%MY_VAR2%"
ECHO Параметр "По умолчанию" тип "%MY_VAR2_TYPE%"
GOTO :EOF
:REG_READ
IF NOT "%~2"=="" (
FOR /F "USEBACKQ TOKENS=* DELIMS=" %%a IN (`REG QUERY "%~1" /v "%~2" 2^>NUL ^|FINDSTR /I /B /C:" %~2" 2^>NUL`) DO CALL :TRANSLATE "%%a" "%~2" "%~3"
1>NUL 2>&1 REG QUERY "%~1" /v "%~2"||(SET "%~3_TYPE="&SET "%~3=!")
)
IF "%~2"=="" (
FOR /F "USEBACKQ TOKENS=* DELIMS=" %%a IN (`REG QUERY "%~1" /ve 2^>NUL ^|FINDSTR /B /C:" " 2^>NUL`) DO CALL :TRANSLATE "%%a" "" "%~3"
1>NUL 2>&1 REG QUERY "%~1" /ve||(SET "%~3_TYPE="&SET "%~3=!")
)
CALL SET "%~3=%%%~3:~0,-1%%"
GOTO :EOF
:TRANSLATE
SET "TEMP_STR=%~1"
IF NOT "%~2"=="" CALL SET "TEMP_STR=%%TEMP_STR:*%~2=%%"
CALL SET "TEMP_STR=%%TEMP_STR:*REG_=%%"
FOR /F "USEBACKQ TOKENS=1*" %%a IN ('"%TEMP_STR%"') DO (
SET "%~3_TYPE=REG_%%~a"
SET "%~3=%%~b"
)
GOTO :EOF

Добавлена возможность чтения из реестра параметра "По-умолчанию".
Проверена работа на WinXP, Win7, Win7x64.
Предполагается что будет корректно работать на всех системах начиная с WinXP и до Win8 включительно.
Не учитывается  ненативный запуск - то есть если на x64 вызвать cmd-скрипт из x86-окружения то подмена HKLM\SOFTWARE\ на HKLM\SOFTWARE\Wow6432Node\ произойдет без вашего желания. Прямой же запуск скрипта ВСЕГДА отрабатывает в нативном окружении.

ЗЫ - Что делать с "(значение параметра не задано)" на системах Win7(судя по всему Vista и старше) для пустого параметра "По умолчанию" я пока в универсальном виде не придумал. Такое значение автоматически присваивается неописанному пустому параметру и, к сожалению, оно зависимо от языка системы.