【问题标题】:Check if computer is plugged into AC power in batch file检查计算机是否在批处理文件中插入交流电源
【发布时间】:2025-11-26 12:25:02
【问题描述】:

如何在 Windows 7 的批处理文件中检查计算机是否插入交流电源,就像在 linux 中的 on_ac_power 一样?

【问题讨论】:

    标签: windows-7 batch-file


    【解决方案1】:

    有直接批处理文件的方式:

    WMIC Path Win32_Battery Get BatteryStatus
    

    使用这个和一些find/errorlevel 魔法,你应该可以把它变成一个条件。

    【讨论】:

    【解决方案2】:

    快速谷歌1拖上去

    这是 - 令人印象深刻的 - 该工具的 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% -> 剩余时间未知

    【讨论】:

    • 我最终只是将批处理文件转换为 C 程序。
    • @Jake223:(如果可以的话)本月学习主题:powershell。它真的应该更有意义。是的批处理文件很烂。但我最后一次看到有人用 C(实际上是 C++)程序替换设置脚本是在 AIX 5.1 上。 我们默默地摇头
    【解决方案3】:
    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*
    

    【讨论】:

    • "PowerOnline" 对我不起作用。它也没有列在我的 WMIC BatteryStatus 帮助中,也没有列在文档中:docs.microsoft.com/en-us/windows/desktop/cimwin32prov/… 这是什么版本的 windows?或者也许是不同的电池驱动器?
    • 当时是 Windows 7。我无法再检查电池驱动程序了。
    【解决方案4】:

    这是我在我们的环境中使用的脚本,效果很好:

    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) 电池正在放电。”

    否则,计算机已插入交流电源。

    【讨论】:

    • 我喜欢这个:非常简洁明了
    【解决方案5】:

    您确实可以通过以下方式获取电池/交流电状态:

    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
    

    【讨论】: