Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменение параметра реестра. (http://forum.oszone.net/showthread.php?t=287861)

SANIOK_AV 12-09-2014 12:13 2401834

Изменение параметра реестра.
 
Доброго времени суток!
Помогите пожалуйста с написанием батника.
Существует некоторый параметр реестра 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 2402466

Код:

@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 2403131

Georgio, Спасибо большое!
Работает!
Попробую разобраться для себя как ... ))

SANIOK_AV 15-09-2014 18:51 2403202

Подскажите пожалуйста, как работает конструкция:
Код:

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 2403907

С блоком
Код:

for /f "tokens=*" %%k in ("!var_1:%Domain%=*.%Domain%!") do (
    reg add "%KeyName%" /v "%Value%" /d "%%k" /f>nul
    )

понял - при выполнении моего варианта пробелы не обрезаются.


Время: 13:51.

Время: 13:51.
© OSzone.net 2001-