简介
AppleScript 是一种由苹果公司 开发的脚本语言 ,专门用于其 macOS 操作系统 。这种语言使用户能够自动化控制 Mac 计算机和应用程序的任务。AppleScript 的独特之处在于其语法接近自然语言,这使得即使是非程序员也能理解和编写脚本 。它可以与多种应用程序交互,如 Finder 、Safari 和 Microsoft Office,实现自动化操作,从而提高效率和工作流程的自动化。AppleScript 广泛应用于各种任务,从简单的文件管理到复杂的数据处理流程。
优势
- 自动化任务:能够自动化执行各种任务,如文件管理、系统配置、数据处理等。
- 与 macOS 应用程序集成:与 macOS 上的大多数原生应用程序和一些第三方应用程序有良好的集成,支持自动化这些应用的操作。
- 易于学习:语法接近自然语言,易于理解和学习,即使是非程序员也可以轻松编写脚本。
- 跨应用工作流程:能够控制和协调多个应用程序,实现复杂的跨应用工作流程。
- 强大的脚本能力:支持复杂的逻辑和数据处理功能,适用于多种自动化需求。
总之,AppleScript 是一种强大的自动化工具,特别适合需要在 Mac 环境下提高工作效率和自动化日常任务的用户。
Q: 为什么不选择市面上已经有的一些效率工具?
A:
-
饱受好评的效率软件我也会推荐我一直在用的,没有说吃饱了撑着,非要自己写。
-
但很多软件的功能对于我们来说,并不能完整满足我们的需求:
比如别人的工具有批量移动,但我想批量移动后,给他们按照规则对应的批量重命名。可能A软件有批量移动的功能,B软件有批量重命名的功能,我要实现这个功能,我需要下载两个,然后先定义好A的规则,完成移动后,再定义好B的规则,最终完成我想要的。
-
日常使用的一些效率脚本,使用脚本编辑器并不难,代码量也没有多少。基本看完基础教程,我们就能写出满足我们日常所需。
-
网络筛选符合我们需求的软件比较难,花时间下载下来,还要一一去试,去体验,有一些还需要付费。还不如我们写几行代码来的快!
Q:为什么不使用Python,它也可以帮我们自动化
A:
1. AppleScript学习门槛很低,简单的一些任务,你并不需要编程基础。你只需要根据我的入门文档,就可以轻松实现它,学习的周期短。
2. Python 在我们复杂的大型任务里面可以结合着使用,其他语言也是一样。但是在Mac环境里面,AppleScript的执行效率远远胜过其他语言脚本。就简单的点击按钮,或者识别文字来说,Python可能要用到识图等等,而AppleScript是直接查看这个按钮的信息,点击Python可能要用到坐标,AppleScript则是一行命令click button x of XXX
,这样既高效,而且不容易出错。不会影响程序执行的流畅性。
实际应用
-
批量复制重命名删除某个文件夹的文件
- 根据文件后缀
- 根据文件添加日期
- 根据文件名
-
A老师想从网络文件夹1 和网络文件夹2查找B学生提交的作业,并复制到本地桌面查看。
- 查找一群学生的作业,并记录哪些没查到,哪些查到了,生成Execl文档,放到桌面上。
-
清空回收站。
- 设置定时清理
- 设置回收站大小超过2个G清理
-
自动登录AppleID,然后打开照片APP,将本地的照片,导入到照片里,实现苹果电脑手机照片的共享。
- 自定义创建相册,根据导入时间?或者自定义名称?或者照片的名称前缀?
-
自动发消息(切勿滥发)
-
邮件
-
iMessage
-
-
科研数据处理
-
导入一批数据文件到专门的处理软件,然后点击某些按钮,设置处理的参数
-
一系列的操作
-
导出
-
项目演示
-
压缩图片
javascriptproperty level : "best" on run compress() end run on compress() do shell script "sips -s format jpeg -s formatOptions " & level & " /Users/sunsjay/Desktop/a.png --out /Users/sunsjay/Desktop/output.png " end compress
-
A老师想从网络文件夹1 和网络文件夹2查找B学生提交的作业,并复制到本地桌面查看。
javascriptset jobNumber to "a" tell application "Finder" set fileOne to "COMMON:sunsjay:a:" & jobNumber & ".txt" set fileTwo to "COMMON:sunsjay:b:" & jobNumber & ".txt" if (exists file fileOne) then duplicate file fileOne to desktop display dialog "已经从a文件夹找到,并复制到桌面" else if (exists file fileTwo) then duplicate file fileTwo to desktop display dialog "已经从b文件夹找到,并复制到桌面" else display dialog "文件没有找到" end if end tell
-
查看我电脑里已经安装的软件是什么,以及对应的版本。将它们生成txt文档并放在桌面
javascriptuse AppleScript version "2.5" use framework "Foundation" use scripting additions set plistString to do shell script "system_profiler -xml SPApplicationsDataType" set dataString to current application's NSString's stringWithString:plistString set plistData to dataString's dataUsingEncoding:4 set propertyList to current application's NSPropertyListSerialization's propertyListWithData:plistData options:0 format:(missing value) |error|:(missing value) set allItems to (propertyList's objectAtIndex:0)'s objectForKey:"_items" set nameAndVersion to allItems's dictionaryWithValuesForKeys:{"_name", "version", "path"} set appList to (nameAndVersion's objectForKey:"_name") as list set appVersionList to (nameAndVersion's objectForKey:"version") as list set appPathList to (nameAndVersion's objectForKey:"path") as list set dateStamp to (do shell script "date \"+%Y-%m-%d-%H-%M\"") set desktopPath to (path to desktop as text) -- List set myList to {"All Installed Apps", "Avoid Apple Apps"} set chosenItem to choose from list myList with prompt "Options" if chosenItem is false then display dialog "请选择." else if chosenItem's first item = "All Installed Apps" then set theFilePath to desktopPath & "All Installed Apps " & dateStamp & ".txt" set theFile to open for access theFilePath with write permission repeat with i from 1 to count of appList set appName to item i of appList set appVersion to item i of appVersionList log appName & " " & appVersion write (appName & " " & appVersion & return) to theFile starting at eof end repeat close access theFile display dialog "All installed apps saved to Desktop" else if chosenItem's first item = "Avoid Apple Apps" then set theFilePath to desktopPath & "All Installed Apps without Apple Apps " & dateStamp & ".txt" set theFile to (open for access theFilePath with write permission) repeat with i from 1 to count of appList set appName to item i of appList set appVersion to item i of appVersionList set appPath to item i of appPathList set bundleID to do shell script "mdls -name kMDItemCFBundleIdentifier -r \"" & appPath & "\"" if bundleID does not start with "com.apple." then -- Exclude com.apple. bundle IDs log appName & " " & appVersion & " " & bundleID write (appName & " " & appVersion & return) to theFile starting at eof end if end repeat close access theFile display dialog "Avoided System Apps and saved to Desktop" end if end if
教程规划
-
入门基础篇
- AppleScript的语法结构、关键字、变量和数据类型等基本语法元素。
- 了解脚本对象的概念,以及如何使用应用程序字典来查找和理解应用程序中可脚本化的对象、属性和命令。
- 如何编写清晰、可读性强的脚本代码,以及如何使用调试工具来排查和修复脚本中的错误。
实战:
- 批量文件管理
- 定期备份
- 复制
- 移动
- 重命名
- 删除
- 邮件自动发送
-
进阶篇
- 与其他应用程序集成
- 与服务器后台交互,下载文件,获取上传信息,解析并执行
- 自动化数据处理
- 自定义工作流程
- 图像处理
实战:
-
PhotoShop自动化预处理
-
CSV文件在Numbers文件中处理,并计算
-
照片共享(自动登录账号,文件移动,按钮点击,输入文本)
-
滑词翻译、截图翻译
-
...
Q:没有Mac电脑也可以学习吗?
A:
是可以的!但是还是看你需求,你想学了它来干嘛,如果Windows系统已经有现成可以帮你实现的程序,也大可不必去学习!如果你确实需要它的自动化来帮你处理一些东西,那你可以装一个MacOS的虚拟机,也可以来达到帮你处理的目的。