【发布时间】:2025-11-26 12:25:02
【问题描述】:
如何在 Windows 7 的批处理文件中检查计算机是否插入交流电源,就像在 linux 中的 on_ac_power 一样?
【问题讨论】:
标签: windows-7 batch-file
如何在 Windows 7 的批处理文件中检查计算机是否插入交流电源,就像在 linux 中的 on_ac_power 一样?
【问题讨论】:
标签: windows-7 batch-file
有直接批处理文件的方式:
WMIC Path Win32_Battery Get BatteryStatus
使用这个和一些find/errorlevel 魔法,你应该可以把它变成一个条件。
【讨论】:
快速谷歌1拖上去
ACLineStatus field of the SYSTEM_POWER_STATUS Structure 返回 0 (offline)、1 (online) 或 255 (unknown) .我称它为ACLineStatus.exe。您可以在批处理文件中使用它,检查其中一个值的退出代码。这是 - 令人印象深刻的 - 该工具的 C 源代码 :)
#include <windows.h>
int main()
{
SYSTEM_POWER_STATUS status;
GetSystemPowerStatus( &status );
return status.ACLineStatus;
}
希望有帮助
1http://www.google.com/search?q=windows%20powershell%20battery%20mains%20status
2 注意:在 Linux 上交叉编译,因为我没有 Windows。不过,它在葡萄酒下工作,输出:
$./电池.exe 255% -> 剩余时间未知【讨论】:
set OnAC=false
set cmd=WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline
%cmd% | find /i "true" > nul && set OnAC=true
if %OnAC% == true *Do your thing here*
【讨论】:
这是我在我们的环境中使用的脚本,效果很好:
wmic path Win32_Battery Get BatteryStatus | find /v "BatteryStatus" | find "1" >nul 2>&1
if "%errorlevel%" == "0" (echo Do whatever you want if on BATTERY) else (echo Do whatever you want if on AC POWER)
说明:
在 wmic 命令中,将数字与输出隔离开来。
尝试在结果中找到数字“1”。如果成功,则表示计算机仅靠电池运行。官方术语是“(1) 电池正在放电。”
否则,计算机已插入交流电源。
【讨论】:
您确实可以通过以下方式获取电池/交流电状态:
wmic path Win32_Battery Get BatteryStatus
但是,评估状态值不仅仅是“是 1”与“不是 1”的问题!
退房:
https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-battery
例如,当AC插入时,你应该正常得到“2”
未知 (2)
The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.
但是,您也可以获得其他值的集合。
我相当有信心这些都意味着“使用电池”/“不使用交流电”:
其他 (1) 低 (4) 严重 (5)
这些都表示“使用交流电”/“不使用电池”:
未知 (2) 充电 (6) 充电和高 (7) 充电和低 (8) 充电和 严重 (9)
我强烈猜测这也表示“在 AC 上”:
充满电 (3)
这些似乎不太确定......
未定义 (10) 部分充电 (11)
我猜“未定义 (10)”的意思是“使用交流电”/“无电池”。并且“部分充电(11)”必须表示“电池供电”,但是对于这个(最后一个,奇怪的)枚举,“AC 是否打开”似乎很模糊。
也不是,通常当机器上没有电池时,会返回此消息:
“没有可用的实例。”
总之,出于我的目的,我定义了电池处于的 4 个主要“状态”:
在 Linux 上,有直接的类似物可以从内核中查询。
在我的逻辑中,我首先认为"No Instance(s) Available." == NOT PRESENT,然后我对状态码使用了以下评估:
DISCHARGING
Other (1)
Low (4)
Critical (5)
CHARGING
Unknown (2)
Charging (6)
Charging and High (7)
Charging and Low (8)
Charging and Critical (9)
Partially Charged (11)
FULL
Fully Charged (3)
NOT PRESENT
Undefined (10)
此外,我想要对“isBatteryPresent”和“isAcPower”进行布尔检查。我依靠我的状态评估,然后认为如下:
isBatteryPresent = state != NOT PRESENT
isAcPower = state != DISCHARGING
【讨论】: