Tasker If Else Endif 详解 条件分支控制 Tasker 也能写逻辑
为什么需要 If/Else
没有流程控制时,Tasker 的 Task 就是一串按顺序执行的 Action——要么全做,要么全不做。但真实世界的自动化往往是这样的:
如果电量低于 20% → 发送低电量提醒,同时降低屏幕亮度否则 → 正常播放音乐
If/Else/Endif 就是 Tasker 的"if-then-else"。它让 Tasker 变成了真正有逻辑判断能力的自动化引擎。
If/Else/Endif 的工作方式
If 系列 Action 在 Task 列表里形成代码块:
Action 1
If → 条件 A
Action 2-A(条件 A 满足时执行)
Action 3-A
Else
Action 2-B(条件 A 不满足时执行)
Endif
Action 4(不管条件如何都执行)
条件语法
If 条件本质上是两个值之间的比较:
| 运算符 | 含义 | 示例 |
|---|---|---|
= | 等于 | %BATT = 50 |
!= | 不等于 | %WIFI != home-wifi |
< | 小于 | %BATT < 20 |
<= | 小于等于 | %HOUR <= 7 |
> | 大于 | %TEMP > 35 |
>= | 大于等于 | %HOUR >= 22 |
~ | 模式匹配(正则) | %APP ~ com.chrome.* |
!~ | 不匹配 | %APP !~ com.android.* |
左边和右边都可以是变量或字面量。
条件可以用在三个地方
- If 动作本身——包起一整块条件分支
- 每个 Action 右侧的条件图标——单个 Action 的执行条件(更轻量)
- State Context 的 Variable Value——Profile 级别的条件
嵌套 If
If 块可以嵌套。例如:
If → %BATT < 20
If → %CHARGING = 0(未充电)
Notify → "电量低,请充电"
Display Brightness → 最低
Else
Notify → "正在充电中"
Endif
Else
Media Play
Endif
嵌套太深会让 Task 难读。如果逻辑复杂,考虑用 Perform Task 把分支拆成独立的子任务。
Else If 写法
Tasker 没有原生的 Else If,但可以用 If → Else → If 的嵌套实现:
If → %BATT < 20
Notify → "低电量"
Else
If → %BATT < 50
Notify → "中等电量"
Else
Notify → "电量充足"
Endif
Endif
If 与 Action 条件的区别
每个 Action 右侧有一个小图标,可以单独设置"只有当 XXX 时才执行":
Task:我的任务
1. Variable Set %Msg, "你好"(条件:%FirstRun = 1)
2. Popup → %Msg(无条件,总是执行)
这里 Action 1 有条件(只在 %FirstRun = 1 时执行),Action 2 无条件(总是执行)。
什么时候用哪种:
- 单个 Action 的条件跳过 → 用 Action 自己的条件(更简洁)
- 一组 Action 需要一起跳过 → 用 If/Else/Endif 包起来(逻辑块更清晰)
实战示例
根据电量动态调整省电策略
If → %BATT < 10
Wifi → Off
Bluetooth → Off
Screen Timeout → 15秒
Auto Brightness → Off → 最低
Do Not Disturb → 完全静默
Else
If → %BATT < 30
Screen Timeout → 30秒
Auto Brightness → On
Else
Screen Timeout → 2分钟
Endif
Endif
根据 App 动态改变音量
If → %APP ~ .*video.* OR %APP ~ .*netflix.* OR %APP ~ .*youtube.*
Media Volume → 70%
Screen Timeout → 永不
Else
Media Volume → 30%
Screen Timeout → 30秒
Endif
检查变量是否为空
If → %MyVar ~
Popup → "变量为空,请先设置"
Stop
Else
Perform Task → 后续任务 %MyVar
Endif
~ 是正则匹配空字符串的简写。检查变量是否已赋值的惯用写法。
常见陷阱
If 块和 Exit Task 的组合
Profile 的 Enter 和 Exit Task 是由 Context 状态变化触发的。如果 Enter Task 里用了 If/Else:
Profile:夜间模式(22:00-07:00)
Enter Task:
If → %BATT > 50
Display Brightness → 20%
Else
Stop(电量低就不调亮度,让其他 Profile 处理)
Endif
Exit Task:
Display Brightness → 恢复
这是完全合法的——If/Else 只影响当前 Task 内部的执行,不会干扰 Profile 的激活/退出逻辑。
If 里的 Stop
Stop 会立即终止整个 Task,不管是不是在 If 块里:
If → %BATT < 5
Notify → "电量极低"
Stop → 所有后续 Action(包括 Endif 之后的)都不执行
Endif
Media Play → 只有在 If 条件不满足时才会执行到这里