![]() |
Включение/отключение устройств одним .bat файлом
Помогите с батником который будет отключать устройство если оно включено и включать если оно выключено.
Знаю, что нужно использовать devcon, findstr, if и goto да с if не дружу. Вот состояния устройства C:\>devcon_x64.exe disable "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02" HID\VID_045E&PID_00F9&MI_01&COL02\7&18BF0AD&0&0001 : Disabled 1 device(s) disabled. C:\>devcon_x64.exe status "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02" HID\VID_045E&PID_00F9&MI_01&COL02\7&18BF0AD&0&0001 Name: HID- Device is disabled. 1 matching device(s) found. C:\>devcon_x64.exe enable "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02" HID\VID_045E&PID_00F9&MI_01&COL02\7&18BF0AD&0&0001 : Enabled 1 device(s) are enabled. C:\>devcon_x64.exe status "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02" HID\VID_045E&PID_00F9&MI_01&COL02\7&18BF0AD&0&0001 Name: HID- Driver is running. 1 matching device(s) found. |
Код:
devcon_x64.exe status "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02"|findstr /C:"disabled" |
Спасибо, работает.
Только нужно было devcon закинуть в system32. |
Цитата:
|
Цитата:
Я редко юзаю девкон, но уже больше года хотел её переместить какой-нибудь PATH. |
То есть devcon находился в корне ? Тогда понятно.
|
Моя задача немного сложнее. При загрузке системы, устройство чаще всего не запускается.
Вот, что выдаёт: C:\Windows\system32>devcon64 status "@USB\VID_0079*PID_0007\5&326C0CBC&0&10" USB\VID_0079&PID_0007\5&326C0CBC&0&10 Name: USB- Device has a problem: 10. 1 matching device(s) found. Если сделать рестарт устройства 1-3 раза, через команду devcon64 restatrt, оно запускается и работает нормально.Пишет: Driver is running. ЗАДАЧА: Как сделать, чтобы при запуске батника: 1.Проверка статуса устройства, если оно запущено нормально (Driver is running.), то ничего не делать. 2. Если не запустилось (Device has a problem: 10.), то devcon64 restatrt. Причём команда повторялась бы до тех пор, пока устройство не запуститься, то есть в статусе будет - Driver is running. Знаю, что нужно использовать if,findstr, for, но как это реализовать - не знаю. Обновление драйверов не предлагать. Устройство устаревшее, и чего я только не перепробовал, и не только я - всё бесполезно. Буду очень признателен за любую помощь. Заранее благодарю за ответ. |
ivantresh,
допустим так: Код:
@echo off |
Цитата:
|
Вот, что сделал я:
Файл батника devcon64 status "@USB\VID_0079*PID_0007\5&326C0CBC&0&10"|findstr /C:"Device has a problem: 10" if not errorlevel 1 ( devcon64 restart "@USB\VID_0079*PID_0007\5&326C0CBC&0&10" ) Как бы сюда вставить цикл for или goto, что бы устройство пере запускалось пока не запустится нормально + небольшие паузы после каждого рестарта ? Лишний рестарт может привести к той же ошибке. Нужно, чтобы устройство пере запускалось (команда devcon64 restart) до тех пор, пока нормально не запустится. То есть команда devcon64 status выдаст строку - Driver is running. Обычно бывает достаточно одного перезапуска, но иногда 2-3, очень редко 4. А иногда перезапуск вообще не нужен. |
Проблему решил.
:loop devcon_x64 status "@USB\VID_0079*PID_0007\5&326C0CBC&0&10"|findstr /C:"Device has a problem: 10" if not errorlevel 1 ( devcon_x64 restart "@USB\VID_0079*PID_0007\5&326C0CBC&0&10" timeout /t 1 /nobreak goto loop ) else ( start C:\RAB\MSGPULTRUN.vbs ) |
У меня ситуация хуже: есть две интегрированные сетевые платы, нужно отключить одну из них. Разница там в одной цифре, 1-я плата - PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E4
2-я PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5 Ввожу команду devcon disable PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5 - вырубает обе :( Не знаю, что и делать. P.S. Через wmic или netsh не предлагать :) |
Цитата:
|
Iska,
Вот так? D:\>devcon disable "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5" No matching devices found. |
VasyaOK, так.
Покажите последовательно: Код:
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5" |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&525529E&0&00E4: Realtek PCIe GbE Family Controller #2 2 matching device(s) found. Отключать нужно 1-ю. |
VasyaOK, теперь так:
Код:
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02" |
Iska,
PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5: Realtek PCIe GbE Family Controller PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&525529E&0&00E4: Realtek PCIe GbE Family Controller #2 2 matching device(s) found. |
VasyaOK,
очевидно из этого что окончание "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\***" - рандомное выше и последнее 4&2E680ECD&0&00E4 4&525529E&0&00E4 поэтому и находит только по "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02" брать нужное можно именно таким образом, искать по этой строке потом внутри строки #2 (убедившись что это всегда принадлежит строке, например именно ...E4 или по E4 сразу и искать), а далее при положительном результате (&&) уже давать на выполнение в devcon.exe эту найденную нужную строку. т.е. примерно так: Код:
@echo off |
По-моему, лучше сделать проще:
http://www.nncron.ru/forums/viewtopi...d571dc1#p17887 Я, конечно, попробую ваш вариант - интересно же ;), но, насколько я понял, решение поставленной задачи в рамках devcon - ПРОБЛЕМА... |
|
Цитата alpap:
чем решение в одну строку на cmd? » Тем, что работает. А "решение в одну строку на cmd" - нет. Только этим ;). Вот, что выдаётся: Код:
No matching devices found. Цитата alpap: какие рамки вас смущают? Начнем с того что с devcon вы работаете в рамках cmd и задачу я решил тоже в этих же рамках cmd - так в чем проблема? » Код:
на машине с несколькими сетевками с однотипным чипсетом DEVCON у меня выключал все сетевки, хотя просили только одну - такие вот спецэффекты... Нет, если получится (с DEVCON) я не возражаю - боже упаси! Просто мне кажется, CNIC - не случайно возник ;). Такая вот рифма. |
VasyaOK, какой вывод этого?
Код:
@echo off |
alpap,
"PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5" "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&525529E&0&00E4" |
значит так выводит нужную строку, так?
Код:
@echo off |
alpap,
"PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&525529E&0&00E4" А мне нужно отключать "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5" |
VasyaOK,
ну поменяйте E4 на E5, но "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5" это именно ID? Иначе отключит только по "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02", а сюда обе строки попадают. |
VasyaOK, даже не знаю, что посоветовать.
У меня, кстати, точно так же. Пока я задаю в команде «devcon.exe find» только Hardware ID — ищет и находит: ![]() Как только я пытаюсь добавить к Hardware ID ещё и Instance ID конкретного устройства: Цитата:
![]() В связи с чем возникает вопрос — а умеет ли работать DevCon с Instance ID в принципе? Либо это я что-то не так делаю? |
Цитата:
Цитата:
Так как будет выглядеть команда на отключение? Iska, Повторюсь: http://www.nncron.ru/forums/viewtopi...d571dc1#p17887 |
VasyaOK, проверил ваш cnic, да, так отключает (по имени):
Код:
cnic.exe "Имя адаптера (сетевого подключения)" -d |
Цитата:
А мне бы, в сою очередь, хотелось бы проверить ваш cmd ;) Если это возможно, конечно. |
вот как будет работать вариант с отключением по номеру с помощью cnic
Код:
@echo off если есть пробелы в имени сетевого подключения, то просто посмотреть или еще как использовать имя подключения и имя адаптера можно так Код:
@echo off Цитата:
|
VasyaOK, насколько я понимаю, cnic.exe работает как работало отключение/подключение сетевого соединения в Windows XP, а devcon.exe работает как отключение/подключение в Windows 7, где «отключение» вызывает отключение не соединения, а самого устройства. Если Вам на самом деле нужно отключение/подключение сетевого соединения, а не устройства, то, разумеется, пользуйте cnic.exe (например, «засунув» его вызов в User Menu Far Manager'а).
Цитата:
|
Цитата:
Цитата:
Цитата:
http://forum.oszone.net/post-2865970-25.html выводит одну строку, правда не ту. У меня тогда возможности не было проверить, показалось что "решение близко". Сейчас вот проверил: ну да, замена "Е4" на "Е5" выводит нужную строку. Только толку-то от этого? Насколько я понимаю, проблему отключения именно Е5 это не решает, а значит, DEVCON - это НЕРАБОЧЕЕ РЕШЕНИЕ. На этом и закончим, пожалуй. Если, конечно у вас нет вариантов именно с DEVCON. |
|
Время: 20:24. |
Время: 20:24.
© OSzone.net 2001-