Тема: VBScript: поиск и удаление ключей реестра
Скрипт для поиска и удаления искомых ключей реестра.
1. Запрос искомой фразы для поиска.
2. Вывод результатов в окне Блокнота с возможностью исключения параметров по желанию пользователя.
3. Сохранение файла отчёта в текущей директории по выбору пользователя.
Option Explicit
Dim sSearchFor, st, st0, sRegTmp, sOutTmp, eRegLine, iCnt, sRegKey, aRegFileLines, stroca, isDel, delLine, delLines, resbox
Dim wssh : Set wssh = CreateObject("WScript.Shell")
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
sSearchFor = InputBox("Введите в поле искомое слово." &vbcrlf&vbcrlf& "Задавая искомую фразу, будьте осторожны: Убедитесь в уникальности имени удаляемого параметра...", "Реестр | fate (modified by Lucky)")
If sSearchFor = "" Then Cleanup()
Dim StartTime : StartTime = Timer
sRegTmp = wssh.Environment("Process")("Temp") & "\RegTmp.tmp "
sOutTmp="RegDel "&sSearchFor&".txt"
wssh.Run "regedit /e /a " & sRegTmp, , True
aRegFileLines = Split(FSO.GetFile(sRegTmp).OpenAsTextStream(1, 0).Read(FSO.GetFile(sRegTmp).Size), vbcrlf) 'делим текст данных на строки
FSO.DeleteFile(sRegTmp)
Dim txt : Set txt = fso.OpenTextFile(sOutTmp,2,True)
txt.WriteLine "<fate (modified by Lucky) | Реестр>"
txt.WriteLine "<Ниже перечислены найденные ветки>"&vbcrlf&"<Вы можете удалить здесь те строки, которые хотели бы оставить в реестре...>"
For Each eRegLine in aRegFileLines
On Error Resume Next
If InStr(1, eRegLine, "[", 1) > 0 Then 'проверяем: это раздел (если есть [) или параметр.
sRegKey = eRegLine
end if
If InStr(1, eRegLine, sSearchFor, 1) > 0 Then 'если в строке найдено искомая фраза, работаем с ней:
If sRegKey <> eRegLine Then
st0=Split(eRegLine,"=") 'делим пераметр на то что левее "=" (имя) и правее "=" (значение)
st=Replace(st0(0),"""","") 'берем лишь имя параметра для построения пути
stroca=Mid(sRegKey,2)
stroca=Replace (stroca,"]","",1) 'исключяем знаки ] из строки Раздела
txt.WriteLine stroca &"\"& st 'запись строки в обрабатываемый файл
else
stroca=Mid(sRegKey,2)
stroca=Replace (stroca,"]"," ",1)
stroca =Trim(stroca)
txt.WriteLine stroca & "\" 'запись строки в обрабатываемый файл
End If
iCnt = iCnt + 1
End If
Next
txt.Close
Erase aRegFileLines
If iCnt < 1 Then
wssh.Popup "Поиск длился " & FormatNumber(Timer - StartTime, 0) & " сек. " & _
"По запросу " & chr(34) & sSearchFor & chr(34) & _
" ничего не найдено.",, "Реестр | fate (modified by Lucky)", 4096
FSO.DeleteFile(sOutTmp)
Cleanup()
End If
wssh.Popup "Поиск длился " & FormatNumber(Timer - StartTime, 0) & " сек. " & _
iCnt & " совпадений по запросу " & chr(34) & sSearchFor & chr(34),, _
"Реестр | fate (modified by Lucky)", 4096
wssh.Run "NotePad " & sOutTmp, 3, True 'открытие NotePad с отчётом об удалении
delLines = Split(FSO.OpenTextFile(sOutTmp,1).ReadAll, vbcrlf)
For Each delLine in delLines
if Left(delLine,1)<>"<" then
Err.Clear
wssh.RegDelete delLine 'удаление строки в реестре
If Err.Number<>0 then
Err.Clear : wssh.RegRead delLine
if Err.Number=0 then
resbox=resbox&delLine&vbCrLf&vbCrLf
end if
End if
end if
Next
if resbox<>"" then resbox="Следующие строки удалить не удалось:"&vbCrLf&resbox
isDel=wssh.Popup(resbox&"Хотите сохранить файл отчета удаляемых строк?",, _
"Отчёт | fate (modified by Lucky)", 36)
if isDel=7 then FSO.DeleteFile(sOutTmp)
Cleanup()
Sub Cleanup()
Set wssh = Nothing
Set FSO = Nothing
WScript.Quit
End Sub
Авторы скрипта — Lucky и fate.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.