1

Тема: CMD/BAT: Изменение параметра реестра

Доброго времени суток!
Помогите пожалуйста с написанием батника.
Существует некоторый параметр реестра 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 (через точку запятую) в значение этого параметрареестра.
Заранее благодарен!

2

Re: CMD/BAT: Изменение параметра реестра

WSH устроит?

3

Re: CMD/BAT: Изменение параметра реестра

Это в смысле на vbs или js ?
Меня то как бы vbs устроит и так Спасибо что поможете.
Но хотелось бы CMD/BAT потому как я в этом хоть чуть что-то знаю и потом бы это мне пригодилось в будущем для каких-то подобных моментов, а в vbs я вообще полный ноль((

4

Re: CMD/BAT: Изменение параметра реестра

2alexii
На WSH все же код будет поболее, хотя в плане регулярных выражений... но можно обойтись и без них.
SANIOK_AV
Если правельно понял, то как-то так:

@echo off
  setlocal enabledelayedexpansion
    set "key=2^>nul reg query HKCU\Software\Programma"
    for /f "tokens=3" %%i in (
      '%key% ^| findstr /irc:"parametr"'
    ) do set "val=%%i"
    if "%val%" equ "" echo.Value is empty or does not exist. & goto:eof
    set "bak=%val%"
    set "reg=domain.site.com"
    :substring
      if "%val%" equ "" goto:end
      for /f "delims=;" %%i in ("%val%") do (
        if "%%i" equ "%reg%"   set "cut=%%i"
        if "%%i" equ "*.%reg%" set "ful=%%i"
      )
    :split
      set "chr=%val:~0,1%"
      set "val=%val:~1%"
      if "%val%" equ ""  goto:substring
      if "%chr%" neq ";" goto:split
      goto:substring
    :end
    if "%ful%" equ "" if "%cut%" equ "" set "bak=%bak%*.%reg%"
    if "%ful%" equ "" if "%cut%" neq "" set "bak=!bak:%reg%=*.%reg%!"
    echo.%bak%
  endlocal
exit /b

Здесь все просто: проверяем наличие ключа и, если таковой имеется, извлекаем строку из параметра parametr, который разбиваем на подстроки и сверяем их с wildcard *.domain.site.com, - это в общем, с деталями, полагаю, разберетесь самостоятельно.

5

Re: CMD/BAT: Изменение параметра реестра

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

6

Re: CMD/BAT: Изменение параметра реестра

greg zakharov, Спасибо большое!
Работает, но в случае присутствия в з начении domain.site.com без "*.", он "*." не добавляет ((

Yury, Спасибо большое!
Работает!