本文目录导读:

- Linux 系统 (最灵活,推荐使用 Bash + ACPI 或 UPower)
- macOS 系统 (使用 pmset 命令)
- Windows 系统 (使用 PowerShell / Batch)
- 更高级的Python脚本 (跨平台)
- 总结与选择建议
是的,实用脚本完全可以自动检测电池状态,这在 Linux、macOS 和 Windows 系统中都非常常见,通常用于以下场景:
- 电量过低时自动提醒(避免突然关机)
- 电量充满时发出通知(防止过度充电)
- 生成电池健康报告(记录循环次数或损耗)
- 集成到系统托盘或状态栏
下面我为你提供几个不同操作系统和场景下的实用脚本示例。
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) 让系统每隔几分钟自动运行这个脚本。
- 打开终端,输入
crontab -e - 添加一行:
*/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)
- 创建一个 plist 文件
~/Library/LaunchAgents/com.user.batterycheck.plist - 配置成每 10 分钟运行一次(需要 XML 格式配置)
Windows 系统 (使用 PowerShell / Batch)
Windows 自带的 WMIC 或 PowerShell 可以获取电池信息。
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)
}
设置计划任务
- 搜索“任务计划程序”
- 创建基本任务
- 触发器选择“每天” -> 重复任务间隔 5 分钟
- 操作选择“启动程序” ->
powershell.exe - 参数:
-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 的系统托盘图标)的完整配置教程,我可以进一步说明。