automator工作流中变量与条件判断需协同工作:变量须明确来源、规范命名并稳定传递;条件判断应分层级优先级,复杂逻辑用shell脚本实现;调试时通过提醒或日志验证变量是否有效。

Automator 工作流里变量和条件判断不是两个独立功能,而是协同工作的基础组合:变量负责“记住信息”,条件判断负责“做决定”。关键在于让变量值能被准确提取、稳定传递,并在合适的位置参与逻辑分支。
变量怎么设才真正可用
变量必须先有明确来源,再被后续动作引用。不能凭空创建,也不能靠猜测命名。
- 从文件属性提取时,用“设定值为变量”配合“获取指定的 Finder 项目”或“请求访达项目”,把文件名、扩展名、大小、创建日期等存成带描述性名称的变量,比如 file_name、file_ext、file_size_bytes
- 变量名避免用中文、空格或特殊符号,全部小写加下划线最稳妥,例如 invoice_flag 而不是 “是否是账单”
- 变量一旦设定,在同一工作流中可多次调用;但不能跨工作流自动共享——需要手动导出/导入或借助外部工具(如剪贴板、临时文件)中转
条件判断要分清层级与优先级
单一“如果”操作只能二选一,复杂分类必须靠嵌套或脚本支撑,否则容易漏判或误判。
- 推荐先按确定性强的维度分流,比如扩展名(.pdf/.xlsx)优先于文件名关键词,因为后者可能含歧义
- 嵌套“如果”时,“否则”分支里再拖一个“如果”,形成链式结构;最后一层“否则”务必设兜底路径,比如移入 ~/Documents/Others,防止文件无处可去
- 纯 Automator 的“如果”只支持简单匹配(如“包含”“以…开头”),正则表达式、大小范围比较、多条件合并(如“是PDF且文件名含Invoice”)需用 Shell 脚本实现
Shell 脚本是复杂逻辑的可靠出口
当分类规则超过三四个条件、涉及模糊匹配或需要计算时,硬靠图形界面堆叠“如果”会迅速失控。此时直接嵌入 Shell 是更清晰、更易维护的做法。
- 拖入“运行 Shell 脚本”,Shell 类型选 /bin/zsh,传入方式选“作为自变量”,这样每个文件路径会作为 $1 传入
- 脚本内可用标准命令处理:basename 提取文件名、grep 或 sed 做关键词匹配、stat -f "%z" 获取大小、date -jf 比对时间等
- 建议把核心判断逻辑封装成函数,比如 is_invoice()、is_photo(),再用 if-elif-else 调用,既可读又方便后期扩展
调试时重点看变量有没有“活”起来
很多问题其实出在变量没传过去,而不是逻辑写错。验证方法很简单:
- 在关键节点后加“显示提醒”,内容填 {{变量名}},运行时弹窗若显示为空或乱码,说明变量未成功赋值
- 用“记录到日志”操作把变量值写入文本文件,比弹窗更安静也更完整,适合批量处理时追踪
- Shell 脚本里第一行加 set -x,可打印每条命令执行过程,快速定位哪一步变量为空或路径错误










