Продвинутый кросплатформенный модуль для встраивания в скрипты, позволяющий в удобной форме получать данные из реестра для дальнейшего использования(как всегда - кодировка скрипта 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
ЗЫ - Что делать с "(значение параметра не задано)" на системах Win7(судя по всему Vista и старше) для пустого параметра "По умолчанию" я пока в универсальном виде не придумал. Такое значение автоматически присваивается неописанному пустому параметру и, к сожалению, оно зависимо от языка системы.