Компьютерный форум 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=212568)

T3D 04-08-2011 07:59 1725653

Скрипт по изменению реестра
 
Здравствуйте.
Может кто-нибудь подсказать реализацию такого а/р на любом языке:
1) Задаём "переменную для поиска" и переменную для замены (можно правкой вручную, можно с окном запроса);
2) Ищем переменную для поиска в реестре;
3) Заменяем найденную переменную на "переменную для замены";

Заранее благодарен за любую помощь.

amel27 04-08-2011 11:44 1725755

- предположу, что под "переменной" понимается "параметр" реестра, так?
- и всё-таки: заменяем переменную (через удаление) или только её значение?
- кроме имени нужно обязательно знать тип параметра, например строка: REG_SZ

Foreigner 04-08-2011 12:10 1725766

Цитата:

Цитата T3D
3) Заменяем найденную переменную на "переменную для замены" »

И благополучно убиваем 100500 похожих вхождений. Например находим все PATH в HKCU:
Цитата:

> reg query hkcu /v "PATH" /s

HKEY_CURRENT_USER\Environment
PATH REG_SZ C:\Users\Dmitry\BIN;C:\Users\Dmitry\BIN\POSH;C:\Users\Dmitry\BIN\GNU\bin

HKEY_CURRENT_USER\Software\7-Zip
Path REG_SZ C:\Program Files\7-Zip\

HKEY_CURRENT_USER\Software\Sysinternals\Process Explorer
Path REG_SZ c:\Users\Dmitry\BIN\SYSINTERNALS\procexp64.exe

Поиск завершен: найдено совпадений: 3.

T3D 05-08-2011 05:48 1726187

Цитата:

Цитата amel27
- предположу, что под "переменной" понимается "параметр" реестра, так? »

Так.
Цитата:

Цитата amel27
- и всё-таки: заменяем переменную (через удаление) или только её значение? »

Только значение
Цитата:

Цитата Foreigner
И благополучно убиваем 100500 похожих вхождений. Например находим все PATH в HKCU: »

Искаться будет уникальный IP-адрес, так что ничего лишнего не удалиться

Foreigner 05-08-2011 08:21 1726217

Цитата:

Цитата T3D
Искаться будет уникальный IP-адрес, так что ничего лишнего не удалиться »

Ставь задачу конкретней. Подозреваю, что искать надо не по всему реестру, может даже искать не надо, а заранее известен раздел\ключ\параметр ( или сократить область поиска до раздел\ключ ) и надо только узнать/поменять его значение.

SendMessage 05-08-2011 13:15 1726363

Для строковых значений. Как заготовка.
Код:

' Для совпадающих строке поиска значений (REG_SZ)

Option Explicit

Dim SectionName
Dim tmpRegFile
Dim FindValue
Dim AddValue
Dim objWSS
Dim objFSO
Dim RegFile
Dim CurrSection
Dim GetLine
Dim KeyName
Dim strPrompt
Dim ReturnValue

SectionName = "HKEY_CURRENT_USER\Software"
tmpRegFile  = "z:\tmp.reg"
FindValue  = "Строка поиска"
AddValue    = "Строка замены"

Set objWSS = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

objWSS.Run "regedit /e " & tmpRegFile & " """ & SectionName & """", 2, True

Set RegFile = objFSO.OpenTextFile(tmpRegFile, 1, True, -1)

Do While RegFile.AtEndOfStream <> True
  GetLine = RegFile.ReadLine
  If Left(GetLine, 6) = "[HKEY_" Then
    CurrSection = Mid(GetLine, 2, Len(GetLine) - 2)
  Else
    If InStr(GetLine, FindValue) Then
      strPrompt = "Вы желаете заменить значение ключа " & GetLine & vbNewLine & _
                  "в разделе " & CurrSection & vbNewLine & _
                  "на значение """ & AddValue & """?"
      ReturnValue = MsgBox(strPrompt, 35, "Замена в реестре")
      If ReturnValue = 6 Then
        KeyName = Replace(Split(GetLine, "=")(0), """", "")       
        If KeyName = "@" Then KeyName = ""
        objWSS.RegWrite CurrSection & "\" & KeyName, AddValue, "REG_SZ"
      ElseIf ReturnValue = 2 Then
        Exit Do
      End If
    End If
  End If
Loop

RegFile.Close

'Следующая строка закомментирована для возможности отката изменений
'objFSO.DeleteFile tmpRegFile 

Set objWSS = Nothing
Set objFSO = Nothing

MsgBox "Скрипт завершил работу"

WScript.Quit

Через промежуточный файл для убыстрения.


Время: 10:06.

Время: 10:06.
© OSzone.net 2001-