Как мне узнать процент заряда батареи в пакетном режиме?

Итак, я просто хочу знать, как получить процент заряда батареи в пакетном режиме.
Я думаю, было бы хорошо, если бы формат был таким:

:forever
get-battery
if "%battery%"=="100%" goto reached100
goto forever

:reached100  
echo Your battery has finished charging!
goto forever

person Scott zuz22 Blacklock    schedule 07.11.2014    source источник


Ответы (3)


Ответ ученого_7 следует пометить как правильный.

Конечно, нет закона против вызова PowerShell из партии.

powershell -command "(Get-WmiObject Win32_Battery).EstimatedChargeRemaining"
56
person Paul Williams    schedule 23.01.2020
comment
В Powershell 6 и более поздних версиях (например, Powershell Core) вы можете использовать (Get-CimInstance Win32_Battery).EstimatedChargeRemaining. Дополнительные сведения о Get-CimInstance см. На странице stackoverflow.com/questions/54495023/ - person Ehtesh Choudhury; 27.01.2021

Использование WMIC

:: Variables to translate the returned BatteryStatus integer to a descriptive text
SET BatteryStatus.1=discharging
SET BatteryStatus.2=The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.
SET BatteryStatus.3=fully charged
SET BatteryStatus.4=low
SET BatteryStatus.5=critical
SET BatteryStatus.6=charging
SET BatteryStatus.7=charging and high
SET BatteryStatus.8=charging and low
SET BatteryStatus.9=charging and critical
SET BatteryStatus.10=UNDEFINED
SET BatteryStatus.11=partially charged

:: Read the battery status
FOR /F "tokens=*" %%A IN ('WMIC Path Win32_Battery Get BatteryStatus /Format:List ^| FIND "="') DO SET %%A

:: Check the battery status, and display a warning message if running on battery power
IF NOT "%BatteryStatus%"=="2" (
    > "%~dpn0.vbs" ECHO MsgBox vbLf ^& "The laptop is currently running on its battery." ^& vbLf ^& vbLf ^& "The battery is !BatteryStatus.%BatteryStatus%!." ^& vbLf ^& vbLf ^& "Connect the laptop to the mains voltage if possible." ^& vbLf ^& " "^, vbWarning^, "Battery Warning"
    CSCRIPT //NoLogo "%~dpn0.vbs"
    DEL "%~dpn0.vbs"
)

Проверьте полный сценарий на http://www.robvanderwoude.com/files/battrun_xp.txt

person RealHowTo    schedule 07.11.2014
comment
Я никогда не пойму, почему люди предпочитают писать массивы в пакетных файлах необычным способом, который придает им странный и загадочный вид, который часто требует объяснения, вместо использования стандартного способа квадратных скобок, который обычно используется во всем мире: SET BatteryStatus[1]=discharging; см. этот комментарий. - person Aacini; 07.11.2014
comment
Я хочу проценты. например: 100 (100%) или 2 (2%), поэтому я мог бы использовать его в командах IF. - person Scott zuz22 Blacklock; 08.11.2014
comment
Вместо BatteryStatus попробуйте EstimatedChargeRemaining - person RealHowTo; 08.11.2014
comment
Также - меня это очень смущает. - person Scott zuz22 Blacklock; 08.12.2014

Вы можете проверить это с помощью команды Wmic.

РЕДАКТИРОВАТЬ:

:forever
Goto get-battery
Echo "%Ba%"
:Next
if "%Ba%"=="100" Goto Fin
goto forever

:Fin
echo Your battery has finished charging!
pause>nul
exit

:get-battery
for /f "tokens=2 delims==" %%E in ('wmic path Win32_Battery get EstimatedChargeRemaining /value') do (set "Ba=%%E")
Goto Next
person Community    schedule 02.07.2019
comment
Смотрите мои новые изменения. - person ; 24.01.2020