作为 macOS 必备软件之一,Keyboard Maestro 将自动化任务几乎做到了极致,少数派网站中已有详细、系统的介绍:

当我们需要配置定期、定时的自动化任务时,Keyboard Maestro 往往是第一选择。
比如:

  • 每天自动下载 Bing 搜索图片,并设为壁纸
  • 每周三自动备份软件列表
  • 每月20号自动清理系统垃圾

Keyboard Maestro 中可用于定期任务的触发器有:

  • Periodic Trigger: 登录状态下特定时段内的周期性运行,比如 3:00 - 5:00 之间每3分钟运行一次
  • Time of Day Trigger:某天某时运行,比如周三、周五的 7:30 运行
  • Login Trigger:当 Keyboard Maestro 随系统启动时运行
  • Wake Trigger:从睡眠中唤醒时运行
  • Cron Trigger:使用 Crontab 命令格式的周期启动器,灵活而强大,语法说明。仅支持 Keyboard Maestro V8 及以上版本。

但是仅仅使用这些触发器存在一定的不足。以「每天自动下载 Bing 搜索图片作为壁纸」为例。存在下列情形:

  • 使用 Time of Day Trigger 设置为每天 12:30 运行,那么如果某天 12:30 之外的时间开机,则当天的壁纸就不能更新。
  • 使用 Login Trigger,则一天中多次的开机、登录会造成任务的重复运行
  • 使用 Login Trigger,如果电脑连续一周开机,则不能正常地每天运行
    其它几种触发器同样存在问题。

接下来,介绍几种特制的定期运行方法:

1. 每天运行一次

请输入图片标题

可以看到,此处复合使用了多个触发器:

  • Login Trigger:Keyboard Maestro 随系统启动时运行
  • Wake Trigger:系统唤醒时运行
  • Time of Day Trigger:如果电脑一直开机,没有登录或唤醒行为时,6:30 定时运行
    这样就确保了,只要一天中使用电脑就会运行任务。

触发器下方的 If Then Else 动作则确保了任务在当天只会运行一次。其原理为:如果今天任务已运行,则将 MacroExample_ROOE_last_run_day 变量设置为今天的日期;下次运行时检查 MacroExample_ROOE_last_run_day 变量,如果是今天的日期,则表明今天已运行,则不再执行动作。

注意:每个任务(Macro)的 MacroExample_ROOE_last_run_day 变量名不能重复,可在变量名前加上当前任务名作为前缀,以做区分。

2. 每周三运行一次

请输入图片标题

此处的原理与第一种大致相同,只是加上 %ICUDateTime%EEE% 以验证当天为周三。

3. 每月20号运行一次

请输入图片标题

此处的原理亦与第一种大致相同,只是加上 DAY() 以验证当天为当月20号。

对于上述三种触发模式,我们可以在 Keyboard Maestro 中建立一个 「-- Macro Example --」文件夹,将其放入,并禁止运行,之后在用到时直接复制并修改。

15
2