Внимание! Перед применением скрипта обязательно:
1) Создайте контрольную точку восстановления системы.
2) Экспортируйте оперируемую ветвь реестра в файл .reg
Ограничения кода:
- Значение параметра не должно начинаться со знака разделителя (_), иначе будет перезаписано значением не до, а после этого знака.
- Код работает только в OS ver. >= Vista.
Код:

::Код предназначен только для работы в OS ver. >= Vista.
@echo off
SetLocal EnableDelayedExpansion EnableExtensions
::Куст, в котором ищем
Set Hive=hkcu\software\myroutine
::Искомое имя параметра (опциональный фильтр)
::Set Param=NameServer
::Разделитель в значении параметра (начиная с него вся часть будет отрезана и перезаписана)
Set Delim=_
rem Получаем имена параметров куста (рекурсивный обход)
for /f "delims=" %%K in ('reg query "%Hive%" /s /f "*" /k ^| find "HKEY"') do (
rem Получаем подробности: имя параметра/тип значения/значение
for /f "delims=" %%V in ('reg query "%%K" /f "*" /d ^| find "REG"') do (
rem 4 пробела заменяем на табуляцию
set "key=%%V"& set "key=!key: = !"
rem Парсим по знакам табуляции
for /f "tokens=1-2* delims= " %%N in ("!key!") do (
Rem Здесь: %%N - имя параметра, %%O - тип значения, %%P - значение
Rem Получаем фильтр имени параметра, если он задан
if Defined Param (Set ParamFilter=%Param%) else (Set ParamFilter=%%N)
Rem Применяем этот фильтр
if "%%N"=="!ParamFilter!" (
Rem Убеждаемся, что искомый разделитель есть в значении
echo.%%P|>nul find "%Delim%"&& (
Echo Found %%K %%P
Rem Отрезаем часть - до разделителя
for /f "tokens=1 delims=%Delim%" %%z in ("%%P") do (
Echo Changing to %%z
reg add "%%K" /v "%%N" /t %%O /d "%%z" /f
)
)
)
)
)
)
pause