.bat: удаление значения реестра после отбора
Добрый день!
Весь день в гугле, но поскольку сам далек от программирования, то ничего толком не получается. Помогите, пожалуйста, решить непосильную задачу: Есть такой раздел в реестре: HKLM\System\CurrentControlSet\Enum\USB, куда сохраняются любые устройства при присоединении к ПК через USB. В данном разделе при присоединении устройства создаются подразделы (назовем их для удобства подразделы 1), содержащие в названии Vid и Pid устройств, например: HKLM\System\CurrentControlSet\Enum\USB\Vid_0930&Pid_6544 HKLM\System\CurrentControlSet\Enum\USB\Vid_03f0&Pid_3b17 и т.д. В свою очередь, в этих подразделах (1) создаются еще подразделы (2), содержащие в названии SN устройств, например: HKLM\System\CurrentControlSet\Enum\USB\Vid_0930&Pid_6544\0765432567654 HKLM\System\CurrentControlSet\Enum\USB\Vid_0930&Pid_6544\2131231233231 и т.д. В подразделах (2) есть параметр типа REG_SZ, который называется Service. Он содержит информацию о том, что за устройство было подключено. Например, если он равен USBSTOR, то была подключена флешка. =================================== Теперь сама задача, которую я устал решать вручную: Нужно удалить с ПК все флешки. Необходимо, чтобы умный bat-файл проверял каталог HKLM\System\CurrentControlSet\Enum\USB на содержимое файлов Service (которые лежат в подразделах (2), причем имена подразделов (1) и (2) у всех устройств разные), а потом удалял нужный подраздел (1), например: Флешка была HKLM\System\CurrentControlSet\Enum\USB\Vid_0930&Pid_6544\0765432567654 (параметр Service=USBSTOR), значит нужно удалить подраздел HKLM\System\CurrentControlSet\Enum\USB\Vid_0930&Pid_6544. Проблема в том, что нельзя просто удалить папку USB, т.к. в ней, помимо флешек, еще много всего нужного - USB-хабы, принтеры, мышки, USB-порты виртуальных машин и т.д. Я так понимаю, что нужен предварительный поиск и сохранение пути для удаления в какую-то переменную, причем это должно быть в цикле, но сколько с интернета всего скачал - ничего не получается собрать вместе. Заранее огромное спасибо, господа скриптеры :) . |
Нашел такое:
@echo off set sKey=HKCU\Software\Microsoft\Internet Explorer\TypedURLs for /f "delims= " %%i in ('reg.exe query "%sKey%" ^| find /i "www.microsoft.com"') do (reg.exe delete "%sKey%" /v "%%i" /f >nul) Почти подходит, надо только чтобы удалял не просто параметр, а еще и 2 подраздела выше. И искал на 2 раздела ниже, не зная их названий. |
Lightman123, не совсем в тему, но...
Есть замечательная утилита USBDeview которая отображает все USB девайсы в системе, а так же может удалять их следы |
Да, я знаю, спасибо, но USBDeview удаляет только из USB, причем только из CurrentControlSet, а при присоединении флешки следы остаются более чем в 15 ветках реестра.
Хочу все засунуть в 1 bat файл для ускорения процесса. |
Цитата:
а используются только 2 указанные в ключах HKEY_LOCAL_MACHINE\SYSTEM\Select Current и LastKnownGood все остальные висят вхолостую и не используются |
Да, я это знаю, спасибо.
Я говорю это к тому, что даже если взять только каталог CurrentControlSet, то в нем факт подключения флешки остается более чем в 15 ветках! USB, USBSTOR, RemovableMedia, DeviceClasses, USBFlags и т.д. Большую часть из них я уже объединил в 1 файл, но там все просто - удаляется целиком раздел, потом новый создается. А вот с USB затык - тут нужен предварительный отбор. Помогите, пожалуйста, со скриптом :) |
Цитата:
Какова конечная цель? Вам надо предотвратить использование новых и уже ранее подключённых флэшек? Или Вы пытаетесь следы использования зачистить? |
Зачистить следы. Устал это делать вручную в реестре + USBDeview.
Большая часть веток уже добавлена в bat-файл, а вот с этой возник затык... |
Код:
@echo off |
Огромное спасибо! Работает!
|
Не могу этот скрипт оптимизировать под последнюю задачу:
Ветка реестра HKLM\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000} Здесь куча подразделов с именами 0000, 0001, 0002, 0003, ... В этих подразделах есть параметр DriverDesc, у которого могут быть разные значения. Нужно удалить все подразделы 0000, 0001, 0002, 0003, ..., в которых параметр DriverDesc=Запоминающее устройство для USB Помогите, пожалуйста. Пытался исправить скрипт SendMessage - ничего не получилось, не могу понять, где указать, что проверять не на 2 уровня ниже, а на 1, и проблема с русским содержимым параметра DriverDesc. Заранее спасибо огромное! |
Вот сам сделал такое, но в конце он вместо названия подраздела вставляет InfSection REG_SZ USBSTOR_BULK
Почему он это делает понятно, но как сюда вместо этого добавить название подраздела - не понимаю. setlocal enabledelayedexpansion set "Section=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}" for /f "tokens=*" %%a in ('reg query %Section% /s ^| findstr /rc:^USBSTOR_BULK$') do ( if "%%a"=="InfSection REG_SZ USBSTOR_BULK" (echo reg delete %Section%\%%a /f >> 1.txt) |
Цитата:
Код:
@echo off |
Почему-то не работает...
Может я неправильно объяснил мысль - название подразделов мне неизвестны, т.е. я не могу в вашем скрипте в infsection дописать что-то от себя. Подраздел может быть любой из диапазона 0000-NNNN |
Не понимаю почему отличается вывод двух кодов:
setlocal enabledelayedexpansion set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB" for /f "tokens=*" %%a in ('reg query %Section% /s ^| findstr "%Section%\\Vid_ USBSTOR"') do (echo >> 1.txt) setlocal enabledelayedexpansion set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000}" for /f "tokens=*" %%a in ('reg query %Section% /s ^| findstr "%Section%\\00 USBSTOR"') do (echo >> 1.txt) В первом случае выдает ЦЕЛИКОМ пути, а во втором - список [имя_файла тип значение]. Уже взрыв мозга случился, помогите, пожалуйста, со скриптом. Мне кажется, что проблема в {} во втором случае, но как ее решить - не могу понять. Точно, проблема в фигурных скобках. |
Lightman123,
Если честно ничего не понял. Удалить все USBSTORE? Попробуй так: Код:
@echo off |
Извините, если запутал, косноязычен :) .
Еще раз повторю свою проблему: Ветка реестра HKLM\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000} Здесь куча подразделов с именами 0000, 0001, 0002, 0003, ... В этих подразделах (практически в каждом) есть параметр InfSection, у которого могут быть разные значения. Нужно удалить все подразделы 0000, 0001, 0002, 0003, ..., в которых параметр InfSection=USBSTOR_BULK. Сейчас попробую ваш скрипт переделать. |
Код:
@echo off |
Спасибо!
Только не запускается - ругается, что слишком много параметров в командной строке. Как мне кажется, ругается на /v и /s в одной строке. |
Lightman123,
Пример выше, последний, все отработал как положено (без удаления, только вывел на экран через echo) |
Я его целиком скопировал в пустой bat-файл и запустил. Сразу закрывается. Если открыть через cmd, то выдает ошибку про слишком много параметров.
Может дело в версии reg.exe? У меня если смотреть через reg query 3.0, ОС WinXP. |
посмотри reg query /?
Есть ли там параметр /s |
Можно и так:
Код:
@echo off |
Второй вариант сработал, огромное вам спасибо!
|
Цитата:
|
Цитата:
Цитата:
Код:
@echo off |
Время: 13:30. |
Время: 13:30.
© OSzone.net 2001-