article_image

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

  • **流程中产生的某个数据,要隔几步才用上。**比如重命名文件是,刚刚传给 Automator 的文件还不能直接用上,需要再输入一段文本,才能把文件和文件名配套起来;
  • **有些动作 Automator 里根本没有。**调整照片时需要不断点同一套按钮,这种高度自定义的操作在 Automator 里没有对应模块,但我们冥冥中感觉到应该让电脑自己完成;
  • **一组动作的重复次数多到令人无法接受。**有人甩给你 100 张照片,全部要调高亮度,没有装 Photoshop 的你打算用 Automator 救急;
  • ……

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

  1. 变量:将数据暂存起来,随时取用。
  2. 录制:没有的模块,我们教 Automator 做。
  3. 重复:大批量的操作,一个重复模块搞定。

变量

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

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

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

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

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

  1. 设定变量的值
  2. 获得变量的值
Alt text
两个变量模块

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

如何添加一个变量

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

Alt text
添加一个变量

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

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

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

Alt text
用 Finder 重命名时可以输入自定义文件名

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

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

  1. 将待重命名的文件设为变量“输入的文件”;
  2. 等待用户输入文件前缀;
  3. 将用户输入的文本设为变量“文件前缀”;
  4. 获取变量“输入的文件”,传给下一步;
  5. 进行添加文本的重命名操作;
  6. 将文件名中的单词首字母大写。
Alt text
重命名工作流

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

用变量自定义提示信息

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

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

Alt text
把文件名嵌入提示信息

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

Alt text
删除文件前的提示

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

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

认识系统自带变量

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

  1. 日期类:可以表示年、月、日、星期和具体时间,可用于标注文件版本、显示时间提醒;
  2. 路径类:常用文件夹的路径,诸如图片、影片、下载文件夹等,制作文件归档动作时可以直接用起来,而不需要离开 Automator、去 Finder 里拖一个路径过来;
  3. 其他系统信息类:包含电脑名称、操作系统版本、用户邮件地址等数据。
Alt text
日期变量

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

Alt text
用精确到秒的时间当图片名称后缀,避免文件名冲突

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

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

Alt text
Python 手写的日期实在对新手不友好 图:Dr.Drang

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

录制

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

Alt text
我做给您看

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

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

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

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

  1. 确认现有模块真的做不到
  2. 理清我们在进行哪些重复操作

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

  1. 点击菜单栏右侧“Wi-Fi - 关闭 Wi-Fi”
  2. 点击菜单栏左侧“苹果标志 - Sleep”

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

Alt text
Mac 的睡前准备

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

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

Alt text
录制按钮

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

Alt text
录制窗口

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

Alt text
留下需要的操作

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

Alt text
把播放速度调快

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

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

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

循环

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

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

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

Alt text
反复用的工具和临时用的脚手架

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

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

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

Alt text
预览工具可以自动优化亮度,但很不幸,它不支持批处理

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

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

  1. 按下“Auto Level”按钮,调整亮度(其实也调整了其他参数,总之让图片更亮的目的达到了)。
  2. 按下 方向键下键,选中下一张图片。
Alt text
通过 Auto Level 按钮自动优化图片

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

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

Alt text
录制调整图片亮度的动作

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

Alt text
搭配循环模块

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

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


  1. 主要是“显示通知”、“请求文本”和“请求确认”这几个模块。

author_avatar

Lawyer, macOS/iOS Automation Amateur