本文目录导读:

- 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 的系统托盘图标)的完整配置教程,我可以进一步说明。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播