|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Изменение значения ключа реестра по правилу. |
|
CMD/BAT - Изменение значения ключа реестра по правилу.
|
Новый участник Сообщения: 4 |
Профиль | Отправить PM | Цитировать Есть ключ реестра, находящийся в HKLM\путь , имя Имя, значение чтото_хвостик. Нужно перезаписать значение, убрав все начиная с _ (нижнего подчеркивания). Помогите плз.
|
|
Отправлено: 23:11, 22-03-2013 |
Новый участник Сообщения: 4
|
Профиль | Отправить 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
|
Профиль | Сайт | Отправить PM | Цитировать Какая версия ОС?
|
------- Отправлено: 03:40, 26-03-2013 | #3 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Windows 7
|
Отправлено: 10:08, 26-03-2013 | #4 |
Пользователь Сообщения: 148
|
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 21:30, 28-03-2013 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Diskretor:
|
|
Отправлено: 21:35, 28-03-2013 | #6 |
Пользователь Сообщения: 148
|
Профиль | Сайт | Отправить PM | Цитировать В reg.exe version 3.0 (смотрел на XP x32 en) отсутствуют ключи /f /k в запросе query. Кроме того, формат выходящих данных отличается, что в нашем случае критично для разбора под циклом.
Простите, но универсальной конструкции для сканирования реестра в обеих системах не знаю (еще не придумал). |
------- Отправлено: 21:39, 28-03-2013 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Diskretor, спасибо, ясно.
|
Отправлено: 00:05, 29-03-2013 | #8 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать gora, спасибо!
|
Отправлено: 10:00, 29-03-2013 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - копирование значения ключа реестра в .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 |
|