Войти

Показать полную графическую версию : [решено] Включение/отключение устройств одним .bat файлом


Страниц : [1] 2

BuSHmaker
25-10-2013, 19:15
Помогите с батником который будет отключать устройство если оно включено и включать если оно выключено.
Знаю, что нужно использовать 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.

Гуллипут
26-10-2013, 23:37
devcon_x64.exe status "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02"|findstr /C:"disabled"
if not errorlevel 1 (
devcon_x64.exe enable "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02"
) else devcon_x64.exe disable "HID\VID_045E&PID_00F9&REV_0002&MI_01&Col02"


Вот в таком разрезе.

BuSHmaker
27-10-2013, 02:02
Спасибо, работает.
Только нужно было devcon закинуть в system32.

Гуллипут
27-10-2013, 11:50
Только нужно было devcon закинуть в system32 »
Этого я не понял. Что значит "закинуть" и зачем ? Судя по твоим командам, он запускался просто из корня диска C: и работал, или я что-то не так понял ?

BuSHmaker
28-10-2013, 16:31
Этого я не понял. Что значит "закинуть" и зачем ? Судя по твоим командам, он запускался просто из корня диска C: и работал, или я что-то не так понял ? »
Запускался с корня он только после смены рабочего каталога на корень C:. Твой батник, без смены каталога, работал бы только при запуске с корня C:. А теперь он работает с любого места.
Я редко юзаю девкон, но уже больше года хотел её переместить какой-нибудь PATH.

Гуллипут
29-10-2013, 00:25
То есть devcon находился в корне ? Тогда понятно.

ivantresh
02-01-2017, 18:15
Моя задача немного сложнее. При загрузке системы, устройство чаще всего не запускается.
Вот, что выдаёт:

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, но как это реализовать - не знаю. Обновление драйверов не предлагать. Устройство устаревшее, и чего я только не перепробовал, и не только я - всё бесполезно.

Буду очень признателен за любую помощь. Заранее благодарю за ответ.

alpap
02-01-2017, 21:47
ivantresh,
допустим так:

@echo off
:st
devcon64 status "@USB\VID_0079*PID_0007\5&326C0CBC&0&10"|find /i "Driver is running" && (echo Все в порядке& goto out) || (echo Есть проблема& goto st)
:out
exit/b

но вряд-ли, перезапускать надо что-то по-глобальнее чтобы проблемный драйвер запустился и скорее после метки :st, нужна строка запуска чего-то еще.

Iska
02-01-2017, 22:49
& goto out »
и сама метка тут, в общем-то лишние.

ivantresh
02-01-2017, 23:54
Вот, что сделал я:

Файл батника

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. А иногда перезапуск вообще не нужен.

ivantresh
04-01-2017, 09:31
Проблему решил.

: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
)

VasyaOK
29-03-2019, 18:57
У меня ситуация хуже: есть две интегрированные сетевые платы, нужно отключить одну из них. Разница там в одной цифре, 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
29-03-2019, 19:16
Не знаю, что и делать. »
Например, не забывать о том, что в командной строке символ «&» имеет особый смысл. Проще всего заключить идентификатор устройства в кавычки.

VasyaOK
29-03-2019, 19:58
Iska,
Вот так?
D:\>devcon disable "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5"
No matching devices found.

Iska
29-03-2019, 22:31
VasyaOK, так.

Покажите последовательно:
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5"
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0"
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD"
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4"
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458"

VasyaOK
30-03-2019, 10:07
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0&00E5" »
No matching devices found.
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD&0" »
No matching devices found.
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4&2E680ECD" »
No matching devices found.
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02\4" »
No matching devices found.
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458" »
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.
Отключать нужно 1-ю.

Iska
30-03-2019, 12:50
VasyaOK, теперь так:
devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02"

VasyaOK
30-03-2019, 13:38
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.

alpap
30-03-2019, 14:40
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
for /f "delims=:" %%a in ('devcon.exe find "PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_02"^|find /v "matching"') do (
<nul set /p="%%a"|>nul findstr /e "E4" && devcon.exe disable "%%a"
)
pause

VasyaOK
30-03-2019, 15:10
По-моему, лучше сделать проще:
http://www.nncron.ru/forums/viewtopic.php?p=17887&sid=b705da0b47ed365f78394b028d571dc1#p17887
Я, конечно, попробую ваш вариант - интересно же ;), но, насколько я понял, решение поставленной задачи в рамках devcon - ПРОБЛЕМА...




© OSzone.net 2001-2012