Tasker变量需严格区分作用域:全局%VAR全大写、局部%var小写、系统变量只读;命名须%开头+字母/下划线,赋值用变量设置/JavaScriptlet/插件/文件读取;条件判断注意空值与0区别;数组用@符号,%i自动索引遍历。

要在Tasker中实现任务间数据流转、动态控制执行逻辑或与插件交互,必须准确理解变量的创建时机、作用域边界和引用语法,否则会出现%var为空、跨任务取值失败或条件判断始终为假等问题。
变量命名规则与基础写法
Tasker变量名必须以百分号%开头,后接字母或下划线,不能以数字开头,不区分大小写但建议统一小写。例如:%name、%count、%user_input。
变量名中禁止使用空格、中文、连字符(-)或特殊符号,如%user name、%file-path、%当前时间均无效。
这一步操作起来很简单,直接在“变量设置”动作里输入%abc即可新建,无需预先声明。
三种变量作用域的实际区别
全局变量(%VAR_NAME):所有任务、配置文件、插件均可读写,重启Tasker后仍存在,适合存长期状态(如开关标志、用户偏好)。
局部变量(%var_name):仅在当前任务内有效,任务执行完毕自动销毁,适合临时计算中间值(如循环计数、字符串拼接结果)。
【关键区别】局部变量名小写,全局变量名全大写——Tasker靠大小写严格区分作用域,写错大小写会导致读不到值。
系统变量(%time、%battery、%location):只读,由Tasker自动更新,不能赋值,但可被其他动作引用或用于条件判断。
变量赋值的四种可靠方式
方法一:使用“变量设置”动作
在任务中添加“变量→变量设置”,填入变量名(如%msg)和值(如Hello World),勾选“多行”可输入换行内容。
方法二:用“JavaScriptlet”执行动态赋值
适用于需要计算、正则提取或数组操作的场景,例如:const t = new Date(); setVar('time_now', t.toLocaleTimeString());
方法三:从插件获取值并自动注入变量
如AutoInput的“获取文本”动作会生成%aii_text;Termux:Tasker执行后自动提供%stdout、%result——【必须勾选Wait for result】,否则%stdout始终为空。
方法四:通过“文件→读取文件”导入外部内容
路径需为Termux或Android可访问路径(如/data/data/net.dinglisch.android.tasker/files/notes.txt),读出内容自动存入%read_file。
变量在条件判断中的典型用法
第一步:添加“如果”动作,点击“配置”→“条件”→“变量”
第二步:选择变量(如%result),运算符选“!=”,值填“0”——表示“若命令执行失败则进入分支”
第三步:在“如果”块内添加“变量→变量清除”清除%stdout,避免残留内容干扰后续任务
注意:Tasker对空值判定宽松,%empty == "" 和 %empty == null 均为真,但%empty == 0为假——数字0和空字符串不是同一值。
这一步不能跳过,否则错误分支可能因变量残留误触发。
变量数组的创建与遍历
Tasker原生支持数组语法:变量名后加@符号即为数组,如%list@、%files@。
向数组追加元素:用“变量→变量设置”,值填%list@ + “item1” + “\n”,再勾选“追加到变量”
获取数组长度:系统变量%list@#自动返回元素个数,无需脚本计算
遍历数组执行动作:添加“任务→执行任务”,任务名填“处理单个项目”,参数填%list@%i ——Tasker会自动将%i替换为当前索引(从1开始)
这一步要求被调用的任务中必须包含“变量→变量设置”,把%par1赋给%current_item,否则%par1无法在子任务中使用。


















