Показать полную графическую версию : Удаление строк в REG файле
gen0m.rsw
26-09-2011, 00:51
"Плотно сижу" на Advanced Installer, естественно приходится добавлять записи в реестр, вот какая проблема!
После экспорта/сохранения из многих программ получается примерно такие reg-файлы (пример)
[HKEY_LOCAL_MACHINE\SOFTWARE]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers]
@="1"
При импорте в Advanced Installer енто недопустимо(ошибки при удалении)
Хотелось бы что в файле реестра удалялись , так называемые пустые разделы, кроме последнего( и конечно параметры).
А то приходиться руками чистить(бывало reg-файл доходил до 2500 строк :( )
gen0m.rsw, ближе к вечеру (по MSK) выложу.
Сразу уточню:
1) файл реестра валидный — сигнатура:
Windows Registry Editor Version 5.00
…
наличествует?
2) работать будем только с пятой версией или потребуется поддержка и старой:
REGEDIT4
…
версии?
SendMessage
26-09-2011, 16:29
Если я правильно понял задачу:
Файл считывается полностью. В оправдание могу сказать, что скрипт нормально отработал на файле, включающем в себя весь реестр.
Option Explicit
Dim objRegExp
Dim objFSO
Dim RegFile
Dim strText
Dim strFileName
Dim BOM
Dim valFormat
strFileName = "z:\tmp\1.reg"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set RegFile = objFSO.OpenTextFile(strFileName)
BOM = RegFile.Read(2)
RegFile.Close
If BOM = Chr(&HFF) & Chr(&HFE) Then
valFormat = -1
Else
valFormat = 0
End If
Set RegFile = objFSO.OpenTextFile(strFileName, 1, False, valFormat)
strText = RegFile.ReadAll
RegFile.Close
Set objRegExp = New RegExp
With objRegExp
.Global = True
.IgnoreCase = True
.Pattern = "\[HKEY_.+?\](?:\r\n)+(?=\[HKEY_|$)"
strText = .Replace(strText, "")
End With
Set RegFile = objFSO.OpenTextFile(strFileName & "_", 2, True, valFormat)
RegFile.Write strText
RegFile.Close
Set RegFile = Nothing
Set objFSO = Nothing
Set objRegExp = Nothing
WScript.Echo "Обработка завершена."
WScript.Quit 0
SendMessage, вечером сравним результаты ;).
gen0m.rsw
26-09-2011, 22:38
Iska
Енто я понял, просто не хотел писать лишнего, кто знает тот поймёт!!!
Windows Registry Editor Version 5.00 (Енто понятно что не дописал!!)
SendMessage, не могли ты объяснить вкратце как им пользоваться???
Файл считывается полностью »
Да!
Надеюсь меня MODER-ы простят, забыл как в "личку" писать(ПОМОГИТЕ), хотелось бы дать какой нибудь "ЖЕСТОКИЙ" оригинал для ТЕСТА, если не против!!!
SendMessage
27-09-2011, 13:41
не могли ты объяснить вкратце как им пользоваться??? »
В строку strFileName = "z:\tmp\1.reg"вместо z:\tmp\1.reg вставьте нужный Вам рег-файл. Запустите и смотрите результат (файл не перезапишется, а рядом с ним будет создан файл с тем же именем и расширением REG_ - это и будет отредактированный файл). Да, если не знаете, тот код, что я написал, сохраните в текстовом редакторе с расширением VBS. Его можно запустить двойным кликом. Скрипт написан для тестирования Вами. Потом можно переделать для удобного запуска из комстроки или как Вам угодно.
Цитата SendMessage:
Файл считывается полностью »
Да! »
Я имел в виду, что скриптом редактируемый файл полностью загружается в память, а не читается последовательными блоками.
Енто я понял, просто не хотел писать лишнего, кто знает тот поймёт!!!
Windows Registry Editor Version 5.00 (Енто понятно что не дописал!!) »
Из приведенного Вами куска рег-файла совсем не следует, что он 5 версии. А разница между ними для обработки скриптом большая - новый в юникоде, а старый в ASCII.
SendMessage, работает.
Я не сообразил подходящего регулярного выражения, делал построчным чтением. Разница в результатах на четыре байта (в длине, не в содержимом) при оригинале ~310 тысяч строк (HKCR цельным куском) ;). В скорости мой вариант намного медленнее. Уже посему, думаю, выкладывать не стоит.
Снимаю шляпу!
gen0m.rsw
28-09-2011, 14:39
SendMessage, респеск!!!
Пока глюков не было!
gen0m.rsw
28-09-2011, 15:02
SendMessage, возникла ещё проблемка по поводу дубликатов!
[HKEY_LOCAL_MACHINE\SOFTWARE\ProXima\comedy\1.0]
"Editor"="notepad.exe"
"chain"=dword:00000000
"ignore"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\ProXima\comedy\1.0]
"Editor"="notepad.exe"
Попадаются одинаковые разделы и параметры, нельзя енто как до править в существующем VBS ?
gen0m.rsw, ручной путь подсказать (нужна будет установка стороннего приложения)?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.