Пакетный файл Windows проверяет штепсельную вилку с Battery.PowerOnline всегда возвращает FALSE - PullRequest
0 голосов
/ 28 января 2019

Я сделал на многих планшетах с Windows 10 проверку на выключение при отключении питания в комнате.Сейчас я попытался обновить вид планшетов dell 8.1, но Battery.PowerOnline всегда возвращает false.Есть идеи?

FOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStatus              Get PowerOnline^,RemainingCapacity /Format:list ^| FIND "="') DO SET Battery.%%A
FOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryRuntime             Get EstimatedRuntime               /Format:list ^| FIND "="') DO SET Battery.%%A
FOR /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryFullChargedCapacity Get FullChargedCapacity            /Format:list ^| FIND "="') DO SET Battery.%%A

IF /I "%Battery.PowerOnline%"=="TRUE" (
    SET doShutDown=0
) ELSE (
    SET doShutDown=1
)

1 Ответ

0 голосов
/ 29 января 2019

Вы set Battery.%%A, который ничего не установит, если честно, также вы никогда не определяли переменную %Battery.PowerOnline%, поэтому она никогда не вернет true.Нам действительно нужно проверять каждый статус?Только последняя set из ваших трех команд сохранит значение переменной, поэтому лучше проверьте значение основного poweronline и сделайте что-нибудь оттуда.Обратите внимание, как я устанавливаю переменные:

@echo off
for /F "tokens=* delims=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStatus Get PowerOnline /Format:list ^| FIND "PowerOnline"') DO SET "Battery=%%A" & goto :verify

:verify
if /I "%Battery%"=="PowerOnline=TRUE" (
    set doShutDown=0
) else (
    set doShutDown=1
)
...