# Automator 手册第三章：变量、录制和循环

> 本文公开全文。

原文：https://utgd.net/article/20182

之前几章的重点在于认识基础模块的作用，并且将它们串联使用。可是，但凡对自动化有一些认识的读者，都知道这种一根肠子通到底的玩法是作用有限的：

- 流程中产生的某个数据，要隔几步才用上。比如重命名文件是，刚刚传给 Automator 的文件还不能直接用上，需要再输入一段文本，才能把文件和文件名配套起来；

- 有些动作 Automator 里根本没有。调整照片时需要不断点同一套按钮，这种高度自定义的操作在 Automator 里没有对应模块，但我们冥冥中感觉到应该让电脑自己完成；

- 一组动作的重复次数多到令人无法接受。有人甩给你 100 张照片，全部要调高亮度，没有装 Photoshop 的你打算用 Automator 救急；

- ……

从上面这些场景可以看出，暂时存放数据、创建自定义动作和重复工作流，仅靠组合前几章的模块是无法做到的。本章中，我们将引入 3 个进阶用法，打通模块间的阻隔：

- 变量：将数据暂存起来，随时取用。

- 录制：没有的模块，我们教 Automator 做。

- 重复：大批量的操作，一个重复模块搞定。

## 变量

“变量”这个词，对于非计算机专业的读者来说多少有些神秘。其实在电子计算机的时代到临之前，“变量”概念的描述是非常形象的：

> （变量的）名字本身是没有意义的，它只是一个空空如也的篮子，直到你放入了一些东西。

能凭空设计出变量概念、并用如此通俗语言解释它的人，也只有历史上第一位程序员爱达、和发明家巴贝齐了。

Automator 的变量也是各式“篮子”，其中可以存储各种数据。篮子里盛的，可以是拖到 Automator Application 上的图片、文档或文件，也可以是一段用户自己输入的文本，还可以是 Automator 中自带的一些系统信息（比如日期）。

在 Automator 里有两个和变量相关的模块：

- 设定变量的值

- 获得变量的值

显而易见，这两个模块，就相当于把东西放进篮子、和从篮子中取出两个操作。此外，多数能够输入文本的地方也可以直接插入文本变量，一会儿我们在通知提醒的部分讲讲具体怎么用。

### 如何添加一个变量

任何步骤之后都可以跟上“设定变量的值”模块，把输出的东西装到变量里面。点击模块中的“变量\-新建变量”，输入自己喜欢的名字（可以是中文），点击“完成”变量就设置好了。如果整个工作流中已经有别的变量，通过设定变量模块也可以把东西装进已有的变量中。

当前工作流中所有变量都会显示在编辑界面右下方，如果你没有看见这一栏，可以点击上图箭头所指的按钮把它召唤出来。

### 用变量完善文件重命名动作

用过 Finder 重命名功能的人都知道，Finder 会提供一个输入窗口，方便我们直接输入要替换或者添加的文本。

而 Automator App 运行起来似乎跟一个黑箱一样，怎样在每次使用的时候能够临时输入需要的文本呢？答案就是借助变量。

下面就是一组添加文本的 Automator 步骤，其中多次设定和获取了变量，具体步骤的作用是：

- 将待重命名的文件设为变量“输入的文件”；

- 等待用户输入文件前缀；

- 将用户输入的文本设为变量“文件前缀”；

- 获取变量“输入的文件”，传给下一步；

- 进行添加文本的重命名操作；

- 将文件名中的单词首字母大写。

通过变量，我们成功把文件和文本组合在了一起。

### 用变量自定义提示信息

多数 Automator 是一条流水线一样运行下来的，我们往往不用知道每一步的结果。但是，有些关键步骤的结果还是摆上台面比较好——你总不希望 Automator 不声不响就删掉你的文件吧？

在各种通知和提示中，我们都可以通过变量的方式，嵌入前几步所产生的结果作为提示信息，让 Automator 的运行状态更加明确。比如在删除文件前，可以加一步“请求确认”，提示信息中填入源文件的具体名称，加一道保险。

这样一来，删除文件之前就会给你一个提示了，要返回还来得及。

请求删除模块：Automator 运行到这个模块时会停下来，要求你确认，只有确认后才会继续运行接下来的模块，否则到此为止。可以放在涉及删除、调整系统文件等高危操作之前。

诚然，没有提示信息的 Automator 动作照样能运行，但是通知可以告诉我们动作的运行状况。以后几章接触更复杂的脚本时，通知会成为我们拨开 Automator 黑箱的重要工具。

### 认识系统自带变量

除去自己放进篮子的变量，Automator 还提供了一些现成变量，帮你降低自己设变量的成本。这些变量很杂，主要有：

- 日期类：可以表示年、月、日、星期和具体时间，可用于标注文件版本、显示时间提醒；

- 路径类：常用文件夹的路径，诸如图片、影片、下载文件夹等，制作文件归档动作时可以直接用起来，而不需要离开 Automator、去 Finder 里拖一个路径过来；

- 其他系统信息类：包含电脑名称、操作系统版本、用户邮件地址等数据。

举一个修改图片的例子。给新图片命名时我习惯用 图片\-年月日时间 的形式，每章图片名称都带有精确到秒的时间后缀，基本不用担心文件名冲突。给文章排版时会大批量裁剪、拼接、压缩图片，用这种方式命名，就不必担心弹出“文件已存在”的警告了（如果你电脑运行速度太快，文件名可能还是会打架……）。

有些变量是可以调整格式的，比如上面的日期，双击右下方变量栏中“今天的日期”，就可以看到调整界面。上图演示的是日期改成 2019\-01\-14 这种样式，你也可以设置其他喜欢的格式。要注意，变量栏相当于货架，其中的变量一旦修改，就会影响到整个动作中所有相关变量。

各种自带变量可能多数时候用不上，但是建议记住大致的分类，需要时可以照单寻找。以后我们会接触脚本，一些用代码实现起来很不直观的数据，也许用自带变量会更简单。比如刚才提过的日期，相信没多少人会喜欢用代码写一遍吧？

Automator 的变量并不能直接插入工作流的任意角落，究竟哪些地方能使用、哪些地方不能使用并没有统一的规范。如果非用变量不可（一般这么复杂的情况最好找第三方的专门化工具），倒是有一个通过变量 ID 来强制调用它们的方法，可参考这篇 讨论贴。

## 录制

直到目前为止，我们都主要拿 Automator 里现成的模块来制作动作，但是，Automator 里没有的操作，怎么办？也许读者中有高手已经迫不及待了：学代码，写脚本！不过，那是下一章的内容。这里作为过渡，先介绍一个不用一行代码的方式：我做给您看。

“我做给您看”的用途就是录制动作。它把你的操作（鼠标、键盘）像拍电影一样记录下来，然后打包成可以重复播放、反复利用的工作流。Windows 下有一类“按键精灵”软件，原理和“我做给您看”差不多，也是把键鼠操作录下来、便于反复利用，在一些追求快速操作的游戏玩家里很流行。

光这么说还是有点抽象，所以我们挑一个比较棘手的问题，看看“我做给您看”是怎么解决的。升级到 macOS Mojave 之后，不少 Mac 用户抱怨自己电脑“待机掉电”，严重的甚至能一晚凭空消失三成电量。病因可能有多种，不过坊间流传着一个堪称万金油的解决方式：关掉 Wi\-Fi，手动休眠。

这真的有效，却不是一个讨人喜欢的办法，你想，每天停工后还要右点点、左戳戳，确认设置无误才敢合上电脑盖子，的确不方便。所以，我们用 Automator 来把点击的操作录下来。

想用上“我做给您看”这个模块，需要搞清楚两件事：

- 确认现有模块真的做不到

- 理清我们在进行哪些重复操作

现在，我们确认 Automator 自带的模块里没有休眠和关闭 Wi\-Fi 的模块，而每次电脑入睡前我们做的安眠准备是：

- 点击菜单栏右侧“Wi\-Fi \- 关闭 Wi\-Fi”

- 点击菜单栏左侧“苹果标志 \- Sleep”

注意顺序，休眠要放到最后一步，不然电脑真的睡过去了，后面的操作 Automator 就管不到了。

刚才这一通检查就像电影开拍前的彩排，我们接着要正式开镜，用 Automator 来录下这两步操作，并给它们按一个快捷开关。

首先随便创建一个动作，已经玩得比较溜的读者，不妨直接从听写命令开始本节动作的制作。 “我做给您看”是一个内置模块，但我们不同添加它，而是直接点击 Automator 界面右上方的“录制”按钮来录一段“我做给您看”。

录制开始后，Automator 的界面就会隐去，留给你一个小小的用于终止的录制窗口（类似 QuickTime 录制时的小窗口）。现在可以开始“表演”，按顺序关掉 Wi\-Fi、点击休眠。

表演结束后，就可以点击终止窗口上的红色按键，相当于一个镜头拍完后“咔”一下停掉。在 Automator 的界面里，就可看到录下一系列键鼠操作。不过先别急着保存，还要做一些后期剪辑工作：录制途中可能录下多余的点击操作，需要选中后删掉。

这时候的样片还没法拿出去上映，你播放一次试试，就会发现 Automator 把鼠标移动的过程也录了进去，导致整体跑起来很拖沓。因此还要调一下速度，让影片能够快进——即让动作跑得更快。

根据各个电脑的配置情况，播放速度或许需要调慢一些，没法总是以 10 倍速运行动作。比如我这台老电脑，窗口完全弹出来可能要 2 秒，那就不能播放得太快，不然鼠标就会空点一番。

至此，终于可以把“我做给您看”保存下来，反复利用。这里给大家吃一颗定心丸，Automator 录制的是鼠标点中的系统控件，而不是鼠标点击的像素位置，即便窗口换位置、外接显示器后，“我做给您看”仍然可以正常工作。

需要承认，“我做给您看”是一个典型的傻瓜式方案，简单有效。如果有高手知道更快的脚本方法，还请稍稍按耐，我们下一章就将展开。

## 循环

一般我们做一个自动化动作，往往想着以后每次用它都能节约不少时间，会把它做得很完善，这就像一个工匠在打磨他吃饭的家伙；但不是每次都能做出一个漂亮的批处理小工具，更多情况下，由于各种原因，我们可能不知道脚本怎么写、没装专业级工具、或者真的没时间去查文档，总之，我们不知道那些 Fancy 的方法，眼看只能手动重复一套操作了。

这就到了循环模块出场的时候。

Automator 里的循环模块比较基础，只能按次数或时间来重复动操作，我们也明白自己只是在做一个修修补补凑合用的临时脚手架，但是一旦搭出来，同样能将少重复操作、大大节约时间。

现在，我们来看一个非常糟糕的情况：眼前有 200 张曝光不足的照片，全部需要调高亮度。

有些读者可能会说，只有淘宝店主才需要处理这些东西吧？其实调亮度只是一个例子，普通人旅行归来修个片、网站编辑处理配图，都涉及了图片批处理，而 Automator 这把瑞士军刀里面似乎没有能够拯救废片的模块。

柳暗花明又一村，我们好歹发现预览工具藏着自动调整亮度的功能——可问题是，你即将重复200 次这个无聊的过程。

尽管你可以一张一张慢慢来，但是显然你不想让自己的时间浪费在枯燥的操作上。这次，我们结合“我做给您看”和“循环”这两个模块来解决问题。

照例进行一遍彩排，理清那些步骤是可以简化的。选中所有照片，快捷键 ⌘Command \- O 打开，接着 ⌥Option \- ⌘Command \- C 显示颜色调整窗口，随意调整一张图片试试。很快就能发现，对于每张照片定要进行两步操作：

- 按下“Auto Level”按钮，调整亮度（其实也调整了其他参数，总之让图片更亮的目的达到了）。

- 按下 方向键下键，选中下一张图片。

记住这两步，像背台词一样背下来。接着才轮到 Automator，打开它，然后不用添加任何模块，直接点控制按钮区域的“录制”按钮。

录制开始，每一步都要想演舞台剧一般小心，尽管戏份并不多：点按钮和按方向键下键两步，演出完毕。同样，多余的步骤可以“剪”掉，只留关键的两步。

不过，后期加工才刚刚开始，除了把播放速度快进到 10 倍，还要加上一个“循环”模块，并且设置自动循环 200 次。这样一来，“循环”前面一步就会被重复 200 次。

现在保存一下动作，然后回放。和上一节不用的是，这次动作将重复播放 200 次，把 200 张图片都修改好为止。这个例子其实有真实原型。读书时参加团队活动，我遇到过几百张现场照片待处理的情况，还真有人一张一张去调整（只是调亮度，没有什么艺术加工），结果老师同学都在苦等他的进度。当事那位同学并不知道 Automator 的存在，也不懂专业修图工具（比如 Photoshop）的批处理功能，最后自己辛苦，也耽误大家。

自动化，有时不仅能让干活的人轻松，更能加快整个团队的进度。

---

[前往标准阅读页](https://utgd.net/article/20182?audience=web)
