Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Ответить
Настройки темы
CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!
Весь день в гугле, но поскольку сам далек от программирования, то ничего толком не получается.
Помогите, пожалуйста, решить непосильную задачу:

Есть такой раздел в реестре: 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-порты виртуальных машин и т.д.

Я так понимаю, что нужен предварительный поиск и сохранение пути для удаления в какую-то переменную, причем это должно быть в цикле, но сколько с интернета всего скачал - ничего не получается собрать вместе.
Заранее огромное спасибо, господа скриптеры .

Отправлено: 11:36, 16-08-2011

 

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нашел такое:

@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, 16-08-2011 в 12:01.


Отправлено: 11:48, 16-08-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 849
Благодарности: 155

Профиль | Отправить PM | Цитировать


Lightman123, не совсем в тему, но...
Есть замечательная утилита USBDeview которая отображает все USB девайсы в системе, а так же может удалять их следы
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:53, 16-08-2011 | #3


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да, я знаю, спасибо, но USBDeview удаляет только из USB, причем только из CurrentControlSet, а при присоединении флешки следы остаются более чем в 15 ветках реестра.
Хочу все засунуть в 1 bat файл для ускорения процесса.

Отправлено: 11:58, 16-08-2011 | #4


Ветеран


Сообщения: 849
Благодарности: 155

Профиль | Отправить PM | Цитировать


Цитата Lightman123:
следы остаются более чем в 15 ветках реестра. »
хоть 30 веток в разделе HKEY_LOCAL_MACHINE\SYSTEM\ будет,
а используются только 2
указанные в ключах
HKEY_LOCAL_MACHINE\SYSTEM\Select
Current и LastKnownGood
все остальные висят вхолостую и не используются
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:24, 16-08-2011 | #5


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да, я это знаю, спасибо.
Я говорю это к тому, что даже если взять только каталог CurrentControlSet, то в нем факт подключения флешки остается более чем в 15 ветках!
USB, USBSTOR, RemovableMedia, DeviceClasses, USBFlags и т.д.

Большую часть из них я уже объединил в 1 файл, но там все просто - удаляется целиком раздел, потом новый создается.
А вот с USB затык - тут нужен предварительный отбор.

Помогите, пожалуйста, со скриптом

Отправлено: 12:28, 16-08-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Lightman123:
то в нем факт подключения флешки остается более чем в 15 ветках! »
И что?

Какова конечная цель? Вам надо предотвратить использование новых и уже ранее подключённых флэшек? Или Вы пытаетесь следы использования зачистить?
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:47, 16-08-2011 | #7


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Зачистить следы. Устал это делать вручную в реестре + USBDeview.
Большая часть веток уже добавлена в bat-файл, а вот с этой возник затык...

Отправлено: 12:50, 16-08-2011 | #8


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off

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 (
   if "%%a"=="Service	REG_SZ	USBSTOR" (if "!ps:~0,4!"=="Vid_" echo reg delete "%Section%\!ps!" /f >> usbstor.txt)
   set "ps=!s!"&set "s=%%~na"
)
То, что выделено красным, нужно убрать. Но я настоятельно советую прежде запустить в нынешнем виде и проверить в реестре правильность скрипта.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:07, 16-08-2011 | #9


Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Огромное спасибо! Работает!

Отправлено: 15:32, 16-08-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] .bat: удаление значения реестра после отбора

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Получение значения параметра реестра IfoR Скриптовые языки администрирования Windows 6 08-04-2010 12:54
CMD/BAT - [решено] Получение значения параметра реестра user_123 Скриптовые языки администрирования Windows 3 05-04-2010 13:10
Разное - Изменение значения реестра через батник Raver777 Microsoft Windows 2000/XP 3 22-03-2009 23:46
Разное - Изменить значения реестра из другой ОС Белтон Лечение систем от вредоносных программ 5 10-05-2008 17:09
Доступ - Авто экспорт значения ключа из реестра Billy Bones Microsoft Windows 2000/XP 3 26-07-2007 11:50




 
Переход