|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] .bat: удаление значения реестра после отбора |
|
CMD/BAT - [решено] .bat: удаление значения реестра после отбора
|
Новый участник Сообщения: 14 |
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Не могу этот скрипт оптимизировать под последнюю задачу:
Ветка реестра 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. Заранее спасибо огромное! |
Отправлено: 08:53, 17-08-2011 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Вот сам сделал такое, но в конце он вместо названия подраздела вставляет 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) |
Отправлено: 10:02, 17-08-2011 | #12 |
Ветеран Сообщения: 1758
|
Цитата Lightman123:
|
|
Отправлено: 10:26, 17-08-2011 | #13 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Почему-то не работает...
Может я неправильно объяснил мысль - название подразделов мне неизвестны, т.е. я не могу в вашем скрипте в infsection дописать что-то от себя. Подраздел может быть любой из диапазона 0000-NNNN |
Отправлено: 10:40, 17-08-2011 | #14 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Не понимаю почему отличается вывод двух кодов:
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, 17-08-2011 в 12:02. Отправлено: 11:33, 17-08-2011 | #15 |
Ветеран Сообщения: 1758
|
Lightman123,
Если честно ничего не понял. Удалить все USBSTORE? Попробуй так: @echo off setlocal set "regroot=HKLM\System\CurrentControlSet\Enum\USB" for /f "tokens=*" %%i in ('reg query "%regroot%" /v Service /s') do call:del "%%i" goto:eof :del 0>nul set /p="%~1" | 1>nul findstr /b "HKEY.*" && set "regpath=%~1" || set "param=%~1" for /f "tokens=3" %%i in ("%param%") do if /i "%%i"=="USBSTOR" ( echo reg delete "%regpath%" /v Service /f ) |
Отправлено: 12:31, 17-08-2011 | #16 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Извините, если запутал, косноязычен .
Еще раз повторю свою проблему: Ветка реестра HKLM\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-44455340000} Здесь куча подразделов с именами 0000, 0001, 0002, 0003, ... В этих подразделах (практически в каждом) есть параметр InfSection, у которого могут быть разные значения. Нужно удалить все подразделы 0000, 0001, 0002, 0003, ..., в которых параметр InfSection=USBSTOR_BULK. Сейчас попробую ваш скрипт переделать. |
Отправлено: 12:36, 17-08-2011 | #17 |
Ветеран Сообщения: 1758
|
@echo off setlocal for /f "tokens=*" %%i in ('reg query "hklm\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}" /v InfSection /s') do call:del "%%i" goto:eof :del 0>nul set /p="%~1" | 1>nul findstr /b "HKEY.*" && set "regpath=%~1" || set "param=%~1" for /f "tokens=3" %%i in ("%param%") do if /i "%%i"=="USBSTOR_BULK" ( echo reg delete "%regpath%" /v InfSection /f set "regpath=" set "param=" ) |
Последний раз редактировалось Foreigner, 17-08-2011 в 13:10. Отправлено: 13:00, 17-08-2011 | #18 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Спасибо!
Только не запускается - ругается, что слишком много параметров в командной строке. Как мне кажется, ругается на /v и /s в одной строке. |
Отправлено: 13:05, 17-08-2011 | #19 |
Ветеран Сообщения: 1758
|
Lightman123,
Пример выше, последний, все отработал как положено (без удаления, только вывел на экран через echo) |
Отправлено: 13:13, 17-08-2011 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|