1 (изменено: alexii, 2014-10-19 16:02:01)

Тема: VBS: переменная в reg файле

Здравствуйте.
Имеем reg файл примерного содержания:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\...\...\...\...\Ветка-1]
"Параметр"="Значение REG_SZ"
...
...
[HKEY_LOCAL_MACHINE\...\...\...\...\Ветка-N]
"Параметр"="Значение REG_SZ"

Поясняю: веток реестра, в которые записывается Параметр несколько десятков, ветки не меняются, имя параметра не меняется, довольно часто приходится менять Значение.
Сам делаю так - открываю через Изменить в блокноте, найти и заменить (искать старое значение, заменить на новое значение) и готово, можно запускать. но девушку никак не могу этому научить (не тупая вроде, но даже слушать не хочет что-то про редактирование).
Возможно ли привести мой reg файл к vbs скрипту приблизительного содержания:


код выводящий окно и сохраняющий введенный текст в Переменная1
код вносящий изменение в реестр
[HKEY_LOCAL_MACHINE\...\...\...\...\Ветка-1]
"Параметр"="Переменная1"
...
...
[HKEY_LOCAL_MACHINE\...\...\...\...\Ветка-N]
"Параметр"="Переменная1"

чтобы при запуске выскакивало окно со строкой для ввода нового значения и при нажатии ОК изменения вносились в реестр.
Заранее спасибо.

2

Re: VBS: переменная в reg файле

madjahed
Имена веток отличаются только номером на конце?
Значение параметра для всех веток одно?

3 (изменено: madjahed, 2014-10-19 14:18:30)

Re: VBS: переменная в reg файле

Flasher пишет:

madjahed
Имена веток отличаются только номером на конце?
Значение параметра для всех веток одно?

имена веток разные и в разных разделах, так что если вы имели ввиду цикл - то думаю не сработает
значение параметра будет одно

4

Re: VBS: переменная в reg файле

См. середину кода:

Header = "Правка в реестре"
Value = InputBox(String(5, vbnewline) & "Введите новое значение параметра:", Space(34) & Header)

If Value <> "" Then

  Set FSO = CreateObject("Scripting.FileSystemObject")
  Dim WSH : Set WSH = CreateObject("WScript.Shell")
  L = vbNewLine

'--------- Вводные данные: -------------
  ParName = "Exclusive" ' Имя параметра
' Заносим построчно все ветки:
  All = _
  "HKLM\...\...\...\...\Ветка-1\" & L &_
  "HKLM\...\...\...\...\Ветка-1\" & L &_
  "HKLM\...\...\...\...\Ветка-N\"
'----------------------------------------

  For Each Path in Split(All, L)
    On Error Resume Next
    Key = WSH.RegRead(FSO.BuildPath(Path, "\"))
    If Err.Number <> 0 Then
      Lack = Lack & L & Path
    Else
      Test = 1 : WSH.RegWrite FSO.BuildPath(Path, ParName), Value, "REG_SZ"
    End If
    On Error Goto 0
  Next : If Test Then WSH.PopUp "Данные занесены в реестр!", 1.4, Space(9) & Header
  If Lack <> "" Then MsgBox "Следующих кустов не существует:" & Lack, 4144, Space(20) & Header

End If

5

Re: VBS: переменная в reg файле

Flasher пишет:

См. середину кода:

Header = "Правка в реестре"
Value = InputBox(String(5, vbnewline) & "Введите новое значение параметра:", Space(34) & Header)

If Value <> "" Then

  Set FSO = CreateObject("Scripting.FileSystemObject")
  Dim WSH : Set WSH = CreateObject("WScript.Shell")
  L = vbNewLine

'--------- Вводные данные: -------------
  ParName = "Exclusive" ' Имя параметра
' Заносим построчно все ветки:
  All = _
  "HKLM\...\...\...\...\Ветка-1\" & L &_
  "HKLM\...\...\...\...\Ветка-1\" & L &_
  "HKLM\...\...\...\...\Ветка-N\"
'----------------------------------------

  For Each Path in Split(All, L)
    On Error Resume Next
    Key = WSH.RegRead(FSO.BuildPath(Path, "\"))
    If Err.Number <> 0 Then
      Lack = Lack & L & Path
    Else
      Test = 1 : WSH.RegWrite FSO.BuildPath(Path, ParName), Value, "REG_SZ"
    End If
    On Error Goto 0
  Next : If Test Then WSH.PopUp "Данные занесены в реестр!", 1.4, Space(9) & Header
  If Lack <> "" Then MsgBox "Следующих кустов не существует:" & Lack, 4144, Space(20) & Header

End If

думаю должно сработать.

6

Re: VBS: переменная в reg файле

спасибо.
все работает как и хотелось.
тему считаю закрытой.