Войти

Показать полную графическую версию : Удаление строк в REG файле


gen0m.rsw
11-06-2013, 17:33
Всем участникам форума респект!!!
Одним из участников был написан vbs, для обработки рег файлов , нельзя его доработать.
Option Explicit

Dim objRegExp
Dim objFSO
Dim RegFile
Dim strText
Dim strFileName
Dim BOM
Dim valFormat

strFileName = "NAME.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 & ".reg", 2, True, valFormat)
RegFile.Write strText
RegFile.Close

Set RegFile = Nothing
Set objFSO = Nothing
Set objRegExp = Nothing

WScript.Echo "Обработка завершена."

WScript.Quit 0

Хотелось бы что бы обрабатывались все REG файлы в текущей папке, а оригиналы
переименовывались в .BAK, точнее NAME.REG в NAME.REG.BAK.
Заранее спасибо.

Iska
12-06-2013, 01:02
Пробуйте:
Option Explicit

Const ForReading = 1
Const ForWriting = 2

Const TristateUseDefault = -2
Const TristateTrue = -1
Const TristateFalse = 0


Dim objFile

Dim boolBOM
Dim strContent
Dim strFileName


With WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In .GetFolder(WScript.CreateObject("WScript.Shell").CurrentDirectory).Files
strFileName = objFile.Name

If LCase(.GetExtensionName(strFileName)) = "reg" Then
WScript.Echo strFileName

With objFile.OpenAsTextStream(ForReading, TristateFalse)
boolBOM = .Read(2) = Chr(&HFF) & Chr(&HFE)
.Close
End With

With objFile.OpenAsTextStream(ForReading, TristateUseDefault)
strContent = .ReadAll()
.Close
End With

With WScript.CreateObject("VBScript.RegExp")
.Pattern = "\[HKEY_.+?\](?:\r\n)+(?=\[HKEY_|$)"

.Global = True
.IgnoreCase = True

strContent = .Replace(strContent, "")
End With

objFile.Copy objFile.Name & ".bak"

With .CreateTextFile(strFileName, True, boolBOM)
.Write strContent
.Close
End With
End If
Next
End With

WScript.Quit 0

gen0m.rsw
12-06-2013, 03:39
Iska, нет не работает!!!
В папке было два рег файла(AppEvents.reg,Creative Tech.reg),
ни один не обработал, ну и две ошибки выдал
---------------------------
Windows Script Host
---------------------------
atibkup1.reg
---------------------------
ОК
---------------------------
---------------------------
Windows Script Host
---------------------------
atibkup2.reg
---------------------------
ОК
---------------------------

Iska, пардон, все ОК! По тестим дальше!!!

Iska
12-06-2013, 09:52
ну и две ошибки выдал
atibkup1.reg
atibkup2.reg »
;).

Закомментируйте строку с выводом имён обрабатываемых файлов:
'WScript.Echo strFileName
или используйте «cscript.exe» вместо «wscript.exe» в качестве основного обработчика WSH.

gen0m.rsw
13-06-2013, 06:05
Iska, все нормально, а нельзя что бы еще пустые строки удалял???

Iska
13-06-2013, 08:44
gen0m.rsw, а зачем? Иметь по пустой строке перед именем очередного раздела:
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers]
"DefaultSpoolDirectory"="C:\\WINDOWS\\System32\\spool\\PRINTERS"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Bullzip PDF Printer]
"ChangeID"=dword:15e62a67


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList]
"ProfilesDirectory"=…

— нормальная практика.

gen0m.rsw
10-10-2014, 19:42
Iska
Прошу вашей помощи!!!
Ваш скрипт:
Option Explicit

Const ForReading = 1
Const ForWriting = 2

Const TristateUseDefault = -2
Const TristateTrue = -1
Const TristateFalse = 0


Dim objFile

Dim boolBOM
Dim strContent
Dim strFileName


With WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In .GetFolder(WScript.CreateObject("WScript.Shell").CurrentDirectory).Files
strFileName = objFile.Name

If LCase(.GetExtensionName(strFileName)) = "reg" Then
WScript.Echo strFileName

With objFile.OpenAsTextStream(ForReading, TristateFalse)
boolBOM = .Read(2) = Chr(&HFF) & Chr(&HFE)
.Close
End With

With objFile.OpenAsTextStream(ForReading, TristateUseDefault)
strContent = .ReadAll()
.Close
End With

With WScript.CreateObject("VBScript.RegExp")
.Pattern = "\[HKEY_.+?\](?:\r\n)+(?=\[HKEY_|$)"

.Global = True
.IgnoreCase = True

strContent = .Replace(strContent, "")
End With

objFile.Copy objFile.Name & ".bak"

With .CreateTextFile(strFileName, True, boolBOM)
.Write strContent
.Close
End With
End If
Next
End With

WScript.Quit 0Постараюсь на пальцах!!!

Скрипт обрабатывает чуть больше!!
Оригинал:
[HKEY_CLASSES_ROOT\.dng\OpenWithList]

[HKEY_CLASSES_ROOT\.dng\OpenWithList\PhotoViewer.dll]

[HKEY_CLASSES_ROOT\.dng\OpenWithList\WLXPhotoViewer.dll]

[HKEY_CLASSES_ROOT\.dng]

[HKEY_CLASSES_ROOT\.dng\ShellEx]

[HKEY_CLASSES_ROOT\.dng\ShellEx\{e357fccd-a995-4576-b01f-234630154e96}]
@="{c7657c4a-9f68-40fa-a4df-96bc08eb3551}"
После:

[HKEY_CLASSES_ROOT\.dng\ShellEx\{e357fccd-a995-4576-b01f-234630154e96}]
@="{c7657c4a-9f68-40fa-a4df-96bc08eb3551}"
Интересуют строки, которые должны остаться, без них ни как!!
[HKEY_CLASSES_ROOT\.dng\OpenWithList\PhotoViewer.dll]

[HKEY_CLASSES_ROOT\.dng\OpenWithList\WLXPhotoViewer.dll]В последних скрип игнорирует параметры и значения реестра!!!
С уважением !!!!

Iska
10-10-2014, 21:17
Iska
Прошу вашей помощи!!!
Ваш скрипт: »
Скрипт не мой, а коллеги SendMessage. Я всего лишь изменил его в соответствии с Вашими потребностями.

Постараюсь на пальцах!!!
Скрипт обрабатывает чуть больше!! »
Скрипт обрабатывает ровно столько, сколько заказывали:
"Плотно сижу" на 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 енто недопустимо(ошибки при удалении)
Хотелось бы что в файле реестра удалялись , так называемые пустые разделы, кроме последнего( и конечно параметры). »
Отчего ж Вы теперь удивляетесь, а ;)?




© OSzone.net 2001-2012