Показать полную графическую версию : Удаление строк в 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.
Заранее спасибо.
Пробуйте:
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, пардон, все ОК! По тестим дальше!!!
ну и две ошибки выдал
atibkup1.reg
atibkup2.reg »
;).
Закомментируйте строку с выводом имён обрабатываемых файлов:
'WScript.Echo strFileName
или используйте «cscript.exe» вместо «wscript.exe» в качестве основного обработчика WSH.
gen0m.rsw
13-06-2013, 06:05
Iska, все нормально, а нельзя что бы еще пустые строки удалял???
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
Прошу вашей помощи!!!
Ваш скрипт: »
Скрипт не мой, а коллеги 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.