Войти

Показать полную графическую версию : [решено] Изменение параметра реестра.


SANIOK_AV
12-09-2014, 12:13
Доброго времени суток!
Помогите пожалуйста с написанием батника.
Существует некоторый параметр реестра HKCU\software\programma\parametr типа REG_SZ.
Значение этого параметра представляет собой:
либо пустое значение
либо строку вида что-то типа: site1.com
либо строку состоящую из набора различных имён и масок разделённых между собой точкой с запятой типа: site1.com;megasite2.com;123.org;*.org.ru
либо вообще этотого параметра может не существовать - в этом случае ничего не меняем (т.е. параметр не создаём)

Если же параметр существует, то поступаем следующим образом:
Нужно проанализировать его значение на присутствие маски *.domain.site.com
Если эта маска присутствует, то ничего не меняем.
Если присутствует только domain.site.com то дописываем к нему *. чтоб получилось *.domain.site.com
Если нет ни *.domain.site.com ни domain.site.com то добавляем маску *.domain.site.com (через точку запятую) в значение этого параметрареестра.
Заранее благодарен!

Georgio
13-09-2014, 21:16
@echo off
setlocal enabledelayedexpansion

set "KeyName=HKCU\Software\programma"
set "Value=parametr"
set "Domain=domain.site.com"

(
for /f "delims=" %%i in ('
reg query "%KeyName%" /v "%Value%" /f "%Domain%" /d 2^>nul^| findstr /il "%Domain%"
') do (
set var_1=%%i
for %%j in (%%i) do (
if /i "%%j"=="%Domain%" (
set var_1=!var_1:*REG_SZ=!
for /f "tokens=*" %%k in ("!var_1:%Domain%=*.%Domain%!") do (
reg add "%KeyName%" /v "%Value%" /d "%%k" /f>nul
)
)
)
)
)|| (
for /f "delims=" %%i in ('
reg query "%KeyName%" /v "%Value%" 2^>nul^| findstr /ilc:"%Value%"
') do (
set var_1=%%i
for %%j in (%%i) do (
set var_2=%%j
)
if /i !var_2!==REG_SZ (
reg add "%KeyName%" /v "%Value%" /d "*.%Domain%" /f>nul
) else (
for /f "tokens=*" %%j in ("!var_1:*REG_SZ=!") do (
reg add "%KeyName%" /v "%Value%" /d "%%j;*.%Domain%" /f>nul
)
)
)
)

endlocal
exit /b

SANIOK_AV
15-09-2014, 16:34
Georgio, Спасибо большое!
Работает!
Попробую разобраться для себя как ... ))

SANIOK_AV
15-09-2014, 18:51
Подскажите пожалуйста, как работает конструкция:reg query "%KeyName%" /v "%Value%" /f "%Domain%" /d 2^>nul^| findstr /il "%Domain%"и можно ли было бы вместо блокаfor /f "tokens=*" %%k in ("!var_1:%Domain%=*.%Domain%!") do (
reg add "%KeyName%" /v "%Value%" /d "%%k" /f>nul
)использовать блокset var_1=!var_1:%Domain%=*.%Domain%!
reg add "%KeyName%" /v "%Value%" /d "!var_1!" /f>nul?

SANIOK_AV
17-09-2014, 12:36
С блоком for /f "tokens=*" %%k in ("!var_1:%Domain%=*.%Domain%!") do (
reg add "%KeyName%" /v "%Value%" /d "%%k" /f>nul
) понял - при выполнении моего варианта пробелы не обрезаются.




© OSzone.net 2001-2012