В настоящее время я работаю над пакетным файлом, чтобы удалить все ключи реестра, содержащие или названные определенной строкой (да, я знаю, что это опасно), однако я имея несколько проблем.Удаление всех разделов реестра, содержащих или называемых "string", с Batch
Код я пытался использовать это:
@echo off
set "key=HKEY_LOCAL_MACHINE\SOFT-EXT"
set "search=string"
for /f "delims=" %%a in ('reg query "%key%" /s^| findstr "%search%"') do reg delete "%key%" /v "%%~a"
Это работает для очень конкретной, заранее определенной области реестра - единственный недостаток для меня является то, что мой сценарий должен разобрать ВЕСЬ улей SOFTWARE
реестра , который загружается с внешнего накопителя. В настоящее время скрипт будет работать около ~ 20 секунд без возврата в командной строке. После этого я получаю строки, содержащие FINDSTR: Line 50300 too long
, с увеличивающимся значением номера строки. Некоторое краткое чтение заставляет меня думать, что findstr
может управлять только таким количеством байтов данных, и я, очевидно, перегружаю его из-за массивного размера этого куста реестра (около 80-100 МБ каждый).
Чтобы устранить эту проблему, я попытался изменить цикл, чтобы иметь дополнительный запрос с двумя условными &&
с и ||
, однако, это не работает, либо, потому что иногда ключ реестра, содержащий строку может быть названа HKLM\SOFTWARE\Classes\CSID\{###-###-###}\Example
, с DWORD с именем Name
и значением данных string
.
Есть ли способ сделать то, что я хотел бы сделать с пакетным файлом? Я считаю, что это возможно сделать с PowerShell, однако среда, в которой я работаю, не поддерживает сценарии PowerShell или VB.
Попробуйте использовать findstr вместо поиска. –
Извините - это действительно findstr в коде. Я ошибся. – John