实用脚本能自动检测电池状态吗?

wen 实用脚本 1

本文目录导读:

实用脚本能自动检测电池状态吗?

  1. Linux 系统 (最灵活,推荐使用 Bash + ACPI 或 UPower)
  2. macOS 系统 (使用 pmset 命令)
  3. Windows 系统 (使用 PowerShell / Batch)
  4. 更高级的Python脚本 (跨平台)
  5. 总结与选择建议

是的,实用脚本完全可以自动检测电池状态,这在 Linux、macOS 和 Windows 系统中都非常常见,通常用于以下场景:

  1. 电量过低时自动提醒(避免突然关机)
  2. 电量充满时发出通知(防止过度充电)
  3. 生成电池健康报告(记录循环次数或损耗)
  4. 集成到系统托盘或状态栏

下面我为你提供几个不同操作系统和场景下的实用脚本示例。


Linux 系统 (最灵活,推荐使用 Bash + ACPI 或 UPower)

Linux 下的命令行工具 acpi 是检测电池状态的瑞士军刀。

安装依赖

sudo apt-get install acpi      # Debian/Ubuntu
# sudo dnf install acpi        # Fedora
# sudo pacman -S acpi          # Arch

核心检测脚本 (check_battery.sh) 创建一个脚本,让它自动检测并判断状态。

#!/bin/bash
# 获取电池信息
BATTERY_INFO=$(acpi -b)
# 提取百分比 ( "Battery 0: Discharging, 75%, 01:23:45 remaining")
BATTERY_PERCENT=$(echo "$BATTERY_INFO" | grep -oP '\d+(?=%)')
# 提取状态 (Discharging/Charging/Full)
BATTERY_STATUS=$(echo "$BATTERY_INFO" | grep -oP '(Discharging|Charging|Full)')
# 1. 低电量告警 (低于15%)
if [ "$BATTERY_STATUS" = "Discharging" ] && [ "$BATTERY_PERCENT" -le 15 ]; then
    notify-send -u critical "🔋 电池电量极低" "当前电量: ${BATTERY_PERCENT}%" -i battery-caution
fi
# 2. 电量充满提醒 (高于95%)
if [ "$BATTERY_STATUS" = "Charging" ] && [ "$BATTERY_PERCENT" -ge 95 ]; then
    notify-send -u normal "🔌 电池已充满" "当前电量: ${BATTERY_PERCENT}%" -i battery-full-charged
fi
# 3. 输出状态到终端 (用于调试或crontab执行)
echo "$BATTERY_INFO"

设置定时执行 (Crontab) 让系统每隔几分钟自动运行这个脚本。

  1. 打开终端,输入 crontab -e
  2. 添加一行:
    */5 * * * * /path/to/your/check_battery.sh

    (每5分钟检查一次)


macOS 系统 (使用 pmset 命令)

macOS 自带强大的 pmset 命令。

脚本示例 (mac_battery_check.sh)

#!/bin/bash
# 获取电池状态详细信息
BATTERY_INFO=$(pmset -g batt)
# 提取百分比
BATTERY_PERCENT=$(echo "$BATTERY_INFO" | grep -oE '\d+%' | head -1 | tr -d '%')
# 提取状态 (charging/discharging/charged)
BATTERY_STATUS=$(echo "$BATTERY_INFO" | grep -Eo '(charging|discharging|charged)')
# 低电量提醒
if [ "$BATTERY_STATUS" = "discharging" ] && [ "$BATTERY_PERCENT" -le 15 ]; then
    osascript -e 'display notification "🔋 电量还剩下 '"$BATTERY_PERCENT"'% " with title "电池警告" sound name "Funk"'
fi
# 充满提醒
if [ "$BATTERY_STATUS" = "charged" ] || { [ "$BATTERY_STATUS" = "charging" ] && [ "$BATTERY_PERCENT" -ge 95 ]; }; then
    osascript -e 'display notification "🔌 电池已充满" with title "电池状态"'
fi

设置定时任务 (使用 launchd)

  1. 创建一个 plist 文件 ~/Library/LaunchAgents/com.user.batterycheck.plist
  2. 配置成每 10 分钟运行一次(需要 XML 格式配置)

Windows 系统 (使用 PowerShell / Batch)

Windows 自带的 WMICPowerShell 可以获取电池信息。

PowerShell 脚本 (battery_check.ps1)

# 获取电池信息
$battery = Get-WmiObject Win32_Battery
# 获取电量百分比
$percent = $battery.EstimatedChargeRemaining
# 获取状态 (2=正在充电, 1=放电中)
$statusCode = $battery.BatteryStatus
$statusText = switch ($statusCode) {
    1 { "放电中" }
    2 { "充电中" }
    3 { "已充满" }
    default { "未知" }
}
# 输出状态
Write-Output "电池电量: ${percent}%"
Write-Output "电池状态: $statusText"
# 低电量提醒
if ($percent -le 15 -and $statusText -eq "放电中") {
    # 弹出消息框
    [System.Windows.Forms.MessageBox]::Show("⚠️ 电量过低,请连接电源!", "电池警告", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)
}

设置计划任务

  1. 搜索“任务计划程序”
  2. 创建基本任务
  3. 触发器选择“每天” -> 重复任务间隔 5 分钟
  4. 操作选择“启动程序” -> powershell.exe
  5. 参数:-ExecutionPolicy Bypass -File "C:\path\to\battery_check.ps1"

更高级的Python脚本 (跨平台)

如果你熟悉Python,这是最统一且功能更强的方案。

#!/usr/bin/env python3
import psutil
import subprocess
import time
def get_battery_status():
    battery = psutil.sensors_battery()
    if battery is None:
        print("未检测到电池")
        return
    percent = int(battery.percent)
    plugged = battery.power_plugged
    status = "充电中" if plugged else "放电中"
    # 低电量告警 (仅当未插电时)
    if percent < 20 and not plugged:
        print(f"⚠️ 低电量警告! 剩余{percent}%")
        # 尝试弹出系统通知 (Linux)
        subprocess.run(["notify-send", "-u", "critical", 
                       f"电池电量: {percent}%", "请连接电源"], 
                       check=False)
    # 充满提醒
    elif percent > 90 and plugged:
        print(f"✅ 电池已充满: {percent}%")
    print(f"当前电量: {percent}% | 状态: {status}")
if __name__ == "__main__":
    # 主循环 (实时监控)
    try:
        while True:
            get_battery_status()
            time.sleep(60)  # 每分钟检查一次
    except KeyboardInterrupt:
        print("监控停止")

总结与选择建议

操作系统 推荐工具 难度 说明
Linux acpi + notify-send + crontab 最稳定、资源占用低
macOS pmset + osascript 需要熟悉 launchd
Windows PowerShell + 任务计划程序 适合管理员
跨平台 Python + psutil 功能最强大,但需要安装依赖

最佳实践建议:

  • 对于 低电量提醒,设置为 15%-20% 触发。
  • 对于 充满提醒,设置为 95%-100% 触发,避免电池长期处于 100% 状态(如果是长期插电使用)。
  • 建议脚本中加入 日志记录 (写入文件),方便排查问题。

如果你需要针对特定操作系统(Ubuntu/Kali 的图形化通知,或者 Windows 的系统托盘图标)的完整配置教程,我可以进一步说明。

抱歉,评论功能暂时关闭!