Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение значения ключа реестра по правилу.

Ответить
Настройки темы
CMD/BAT - Изменение значения ключа реестра по правилу.

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть ключ реестра, находящийся в HKLM\путь , имя Имя, значение чтото_хвостик. Нужно перезаписать значение, убрав все начиная с _ (нижнего подчеркивания). Помогите плз.

Отправлено: 23:11, 22-03-2013

 

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


set key="HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters"
set val="Hostname"
for /f "delims=_" %%a in ('reg query %key% /v %val%^|find %val%') do (
for %%b in (%%a) do set secs=%%b )
reg add "%key%" /f /v "Hostname" /d "%secs%"

Проблема в том, что находит в _ типе (REG_SZ) и выдает на выходе REG. Как сделать, чтоб обрабатывал только значение?

Отправлено: 08:57, 23-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


Какая версия ОС?

-------
Alex Dragokas


Отправлено: 03:40, 26-03-2013 | #3


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Windows 7

Отправлено: 10:08, 26-03-2013 | #4


Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


Внимание! Перед применением скрипта обязательно:
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

-------
Alex Dragokas

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:30, 28-03-2013 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Diskretor:
- Код работает только в OS ver. >= Vista. »
Чем вызвано сие ограничение?

Отправлено: 21:35, 28-03-2013 | #6


Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


В reg.exe version 3.0 (смотрел на XP x32 en) отсутствуют ключи /f /k в запросе query. Кроме того, формат выходящих данных отличается, что в нашем случае критично для разбора под циклом.
Простите, но универсальной конструкции для сканирования реестра в обеих системах не знаю (еще не придумал).

-------
Alex Dragokas

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:39, 28-03-2013 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Diskretor, спасибо, ясно.

Отправлено: 00:05, 29-03-2013 | #8


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
Set key="HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters"
Set val="Hostname"
Set delm=_

For /f "tokens=2*" %%a In ('Reg Query %key% /v %val%^|Find %val%') Do Set secs=%%b
Call Set nsecs=%%secs:*%delm%=%%
Call Set nsecs=%%secs:%delm%%nsecs%=%%
:: Слово Echo удалить после проверки
Echo If Not "%secs%"=="%nsecs%" Reg Add %key% /v %val% /d "%nsecs%" /f
Pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:54, 29-03-2013 | #9


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


gora, спасибо!

Отправлено: 10:00, 29-03-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение значения ключа реестра по правилу.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - копирование значения ключа реестра в .reg файле paerpo Скриптовые языки администрирования Windows 12 20-02-2013 19:10
CMD/BAT - [решено] Проверка значения ключа реестра. RomanLis Скриптовые языки администрирования Windows 6 07-09-2012 13:14
CMD/BAT - [решено] как извлечь все значения определенного ключа реестра из определенной ветки baza450 Скриптовые языки администрирования Windows 6 27-12-2011 13:41
Разное - Изменение значения реестра через батник Raver777 Microsoft Windows 2000/XP 3 22-03-2009 23:46
Доступ - Авто экспорт значения ключа из реестра Billy Bones Microsoft Windows 2000/XP 3 26-07-2007 11:50




 
Переход