applescript 是 macos 原生脚本语言,专用于控制原生应用和系统行为,依赖应用词典支持,需结合 system events、shell 命令及权限设置实现跨应用自动化。

AppleScript 是 macOS 原生支持的脚本语言,专为控制应用程序和操作系统行为而设计。它不依赖第三方工具,能直接调用系统服务、操作 Finder、Mail、Calendar、Safari 等原生应用,也支持与 shell 命令、JavaScript(通过 JavaScript for Automation)协同工作。关键在于理解它的面向对象语法和目标应用程序的词典(dictionary)结构。
明确脚本目标并检查应用是否支持 AppleScript
不是所有 app 都开放 AppleScript 接口。在 Script Editor 中,选择 File → Open Dictionary…,浏览目标应用。若显示词典内容(如“document”、“window”、“mail message”),说明可被控制。例如 Safari 有 current tab 和 URL 属性,而多数 Electron 应用(如 VS Code 默认安装)则不支持——需改用 UI Scripting 或辅助功能 API。
- 常用可脚本化应用:Finder、System Events、Mail、Calendar、Reminders、Notes、Safari、Preview、TextEdit
- 系统级任务优先用 System Events:管理音量、屏幕亮度、键盘设置、登录项、定时器、UI 元素点击等
- 不确定时,在终端运行:
osascript -e 'tell app "AppName" to get name',返回名称即基本可用
用 System Events 实现系统控制(无需权限即可完成的部分)
System Events 是 AppleScript 的核心桥梁,许多底层操作都经由它完成。部分操作(如操控菜单栏、点击按钮)需开启“辅助功能”权限,但基础属性读写(如获取屏幕分辨率、当前桌面壁纸路径)通常无需授权。
- 调节音量:
tell application "System Events" to set volume output volume 50 - 锁定屏幕:
tell application "System Events" to keystroke "q" using {control down, command down} - 获取当前桌面背景:
tell application "System Events" to get desktop picture - 隐藏所有窗口:
tell application "System Events" to key code 104 using command down(对应 ⌘+⌥+H)
组合应用逻辑:以「下班自动归档邮件 + 清空下载文件夹」为例
真实场景往往跨多个应用。以下脚本会:① 将 Mail 中今天收到的未读邮件移到“已归档”邮箱;② 删除 Downloads 文件夹中 7 天前的文件(跳过正在使用的文件)。
注意:Mail 脚本需先启用“在脚本菜单中启用邮件”(Mail → 偏好设置 → 规则 → 启用脚本);删除文件前建议先用 do shell script "ls -t ~/Downloads | head -5" 预览。
- Mail 归档部分使用
messages whose (date received ≥ (current date) - 7 * days and read status is false) - 文件清理推荐用 shell 命令更可靠:
do shell script "find ~/Downloads -type f -mtime +7 -not -name '.*' -delete 2>/dev/null" - 添加错误处理:
try … on error errMsg number errNum可捕获 Mail 不响应或文件被占用等情况
部署与触发:让脚本真正跑起来
写完脚本后,保存为 .scpt(可编辑)或 .app(双击运行)。进阶用法包括:
- 添加到菜单栏:用 Script Editor → 文件 → 存储为 → 文件格式选「应用程序」→ 勾选「保持为菜单栏项目」
- 定时执行:配合 launchd 创建 plist 文件,比 iCal 或第三方工具更轻量稳定
- 快捷键触发:用 Keyboard Maestro、Hammerspoon 或 macOS 快捷键设置(系统设置 → 键盘 → 快捷键 → 服务)绑定脚本
- 从终端运行:
osascript /path/to/script.scpt,便于集成进 shell 工作流
AppleScript 的优势不在语法多强大,而在于它和 macOS 的深度绑定。只要理清目标应用的可操作对象、善用 System Events 补足系统层能力、搭配 shell 命令处理文件与进程,就能构建出稳定可靠的自动化链路。不复杂但容易忽略细节——比如 Mail 的规则需手动启用,或 UI 操作前忘记加延迟等待界面就绪。











