Задать вопрос
@Aztart

Как написать bat-скрипт для включения/отключения устройства?

Нужен .bat-файл, проверяющий, работает ли конкретное устройство, если да, то отключает его, если нет, то включает.

Нашёл как его включать и отключать через утилиту pnputil на примере тачпада ноутбука:
pnputil /disable-device "ACPI\SYNA2BA6\3&C8C3232&0" ::отключение
pnputil /enable-device "ACPI\SYNA2BA6\3&C8C3232&0"  ::включение


Но как функционально объединить эти строки в одном файле через проверку состояния нигде не нашёл. Если можно, то несколько разных вариантов с комментариями, хочу понять как работают .bat скрипты в плане циклов и условных операторов.
  • Вопрос задан
  • 66 просмотров
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Инженер по тестированию
    8 месяцев
    Далее
  • Skillbox
    Профессия 1C-разработчик
    8 месяцев
    Далее
  • ProductStar
    Профессия: Python-разработчик
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
Daemon23RUS
@Daemon23RUS
работает ли конкретное устройство

А каков "признак" работы устройства ?
Получив признак, Вы сможете использовать в .bat конструкцию if ... else что решит задачу отключения - включения.
Ответ написан
Комментировать
master_z
@master_z
Программист
Состояние берётся через PowerShell-команду Get-PnpDevice — она напрямую смотрит в Диспетчер устройств Windows и выдаёт точный код (включено/отключено/проблема). В чистом batch без каких-либо внешних вызовов (PowerShell, wmic или утилит) получить это состояние точно нельзя — нет встроенных команд для чтения статуса PnP-устройств. Текущий способ через Get-PnpDevice — один из лучших и самых точных (современный, надёжный). Альтернативы: DevCon (devcon status — проще парсить) или старый wmic (Win32_PnPEntity), но они тоже требуют вызова внешних инструментов. Batch для этого — не лучшая идея, потому что он старый и хрупкий: легко ломается на символах вроде & ( ) ^ в именах устройств, парсинг строк — сплошной геморрой, всё требует костылей. То же самое на PowerShell пишется в 10 строк без головной боли и надёжнее работает.

Наиболее понятный пример:

@echo off
setlocal

set "deviceId=ACPI\SYNA2BA6\3&C8C3232&0"  rem HWID вашего устройства (замените на свой)

rem Получаем статус (предполагаем, что devcon установлен; скачайте с Microsoft)
for /f "tokens=*" %%a in ('devcon status "%deviceId%"') do (
    set "status=%%a"
)

rem Условный оператор: проверяем, содержит ли статус "running" (включено)
if /i not "!status!"=="!status:running=!" (
    echo Устройство включено. Отключаем...
    pnputil /disable-device "%deviceId%"
) else (
    echo Устройство отключено. Включаем...
    pnputil /enable-device "%deviceId%"
)

echo Операция завершена.


В целом если очень надо можно написать и на Bat, получиться что-то такое, я проверил у себя, всё работает. Но написал через Get-PnpDevice :
693c854f3e568527496288.jpeg
Ответ написан
Комментировать
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
Без devcon:
@echo off

set "device_id=HID\MSFT0001&COL02\4&3B114B9D&0&0001"

pnputil /enum-devices /instanceid "%device_id%" | findstr /i "Started" >nul

if %errorlevel% equ 0 (
    echo Устройство ВКЛЮЧЕНО. Отключаем...
    pnputil /disable-device "%device_id%" >nul
) else (
    echo Устройство ВЫКЛЮЧЕНО. Включаем...
    pnputil /enable-device "%device_id%" >nul
)

pause
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы