tasker 中文文档 下载 App

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.*

左边和右边都可以是变量或字面量。

条件可以用在三个地方

  1. If 动作本身——包起一整块条件分支
  2. 每个 Action 右侧的条件图标——单个 Action 的执行条件(更轻量)
  3. 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 无条件(总是执行)。

什么时候用哪种:

实战示例

根据电量动态调整省电策略

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 条件不满足时才会执行到这里