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

Компьютерный форум 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 | Цитировать


Я его целиком скопировал в пустой bat-файл и запустил. Сразу закрывается. Если открыть через cmd, то выдает ошибку про слишком много параметров.
Может дело в версии reg.exe?
У меня если смотреть через reg query 3.0, ОС WinXP.

Отправлено: 13:25, 17-08-2011 | #21



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

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


Ветеран


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

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


посмотри reg query /?
Есть ли там параметр /s
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:28, 17-08-2011 | #22


Старожил


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

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


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

set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000}"

for /f "tokens=*" %%a in ('reg query "%Section%" ^| findstr /c:"HKEY_LOCAL_MACHINE"') do (
   reg query "%%a" /s | find "USBSTOR_BULK" && if not "%%a"=="%Section%" echo reg delete "%%a" /f >> USBSTOR_BULK.txt
)
Только надо проверять имя секции внимательно - у меня другое, например - {36FC9E60-C465-11CF-8056-444553540000}

Последний раз редактировалось SendMessage, 17-08-2011 в 13:34. Причина: подправил скрипт

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:28, 17-08-2011 | #23


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


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

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


Второй вариант сработал, огромное вам спасибо!

Отправлено: 13:41, 17-08-2011 | #24


Ветеран


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

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


Цитата SendMessage:
reg query "%Section%" »
У меня reg query отказался работать с фигурными кавычками в переменной, только напрямую. Экранирование не помогло.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:43, 17-08-2011 | #25


Старожил


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

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


Цитата Foreigner:
У меня reg query отказался работать с фигурными кавычками в переменной, только напрямую »
У меня работает, вроде. А вот findstr отказался. Почему и пришлось выборку делать более общую.

Цитата Lightman123:
Второй вариант сработал, огромное вам спасибо! »
Кстати, его лучше использовать и для первой задачи - более правильный скрипт. Не сразу до кондиции его прокрутил.
Код: Выделить весь код
@echo off

set "Section=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB"

for /f "tokens=*" %%a in ('reg query "%Section%" ^| findstr /c:"%Section%\\Vid_"') do (
   reg query "%%a" /s | find "USBSTOR" && echo reg delete "%%a" /f >> USBSTOR.txt
)

Последний раз редактировалось SendMessage, 17-08-2011 в 14:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 17-08-2011 | #26



Компьютерный форум 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




 
Переход