java apple script,AppleScript脚本入门

本文介绍了AppleScript的基础知识,包括简单的脚本语法、变量、运算符、字符串操作、数组、条件语句和循环。AppleScript是一种易读易写的脚本语言,用于Mac上不同应用程序间的交互。通过示例代码,展示了如何让计算机发音、清空回收站、处理文本等。此外,还讲解了错误处理和文件路径操作,适合初学者入门。
摘要由CSDN通过智能技术生成

作为入门文章,这里尽量写的简单明了一点。况且,AppleScript本身也是一个非常容易的脚本语言。

介绍

作为脚本语言,其实就是一些指令的集合。这种语言和英语类似,因此也易读、易写、易于理解。

他的作用也就是让计算机程序之间的沟通成为可能。

初试AppleScript

脚本就是一系列的指令。

工具:

bVVsRA?w=2448&h=1166

基本操作:

command+k ---> 编译

command+r ---> 运行

control+点击编辑区上半部分 ---> 提示

认识脚本的编写

直接上代码:

say "Let's study applescript" using "Fred"

beep 2

上面的代码就是让计算机发声。最后发两次“咚”的声音。

省略using关键字,就是用默认的朗读语音。

tell application "Finder"

empty the trash

end tell

上面的代码是调用Finder程序,去清空回收站里面的垃圾。

tell关键字调用程序。end tell 结束调用。

### 结束语

是不是感觉这个脚本非常简单且好玩?OK,下面接着一点点来捋一捋他的基本操作吧。

## 处理数字

### 变量

AppleScript也是用变量

set x to 25

这里,就设置了一个x变量,存储着25这个值。

注意,变量名是一个词组成,中间不能有空格。当然,我们不能够使用AppleScript中的保留字来作为变量名。当然,不能以数字开头,但是数字可以出现在变量名中间,下划线也是可以的。

### 计算

set width to 8

set height to 9

set area to width * height

上面的脚本大家应该看一下就懂。

属于叫做运算符,常用的运算符有:+、-、*、/、^、 对的,加减乘除乘方

处理文本

文本也就是我们常说的字符串

弹窗

bVVsR9?w=548&h=1094

由于结果区只能显示最后一行语句的执行结果。所以这里我们使用对话框(display dialog)的形式来演示。

注意:AppleScript是一个由有限词汇构成的一个脚本语言,阅读你写的脚本的时候,

判别哪些是指令,哪些不是。对于Mac微机来说是一件非常复杂的一件事。

所以AppleScript需要依赖一些线索帮助其 读懂脚本中语句行的各个元素的含义。这就是为什么要把字符串放到双引号里面。

对于上述,测试如下脚本 :

set stringToBeDispalyed to "hi there"

display dialog "stringToBeDisplayed"

display dialog stringToBeDispalyed

字符串操作

拼接

set nameOfActress to "Neal is "

set actressRating to " very pretty"

set resultingString to nameOfActress & actressRating

display dialog resultingString

& 是用来拼接字符串。

查看字符串长度

set theLength to the length of "Neal"

the length of 用来获取字符串的长度。这里顺便说一句,字符串中特殊字符是需要转义的。

类型转换

通过上面的学习,你应该知道数字和字符串不是一个数据类型,所以将一种数据类型转换到另一种数据类型,叫做数据类型转换。AppleScript数据类型转换如下:

set strToNumber to "16" as number

set numToStr to 12 as string

list

弱类型语言中的数组

set exampleList to {1,2,3,"hahah",9}

上面的exampleList即是一个列表。

操作

向列表的开头和结尾处添加

代码如下:

set addToBegin to {"winter"}

set addToEnd to {"summer", "autumn"}

set currentList to {"spring"}

set modifiedList to addToBegin & currentList & addToEnd

对的,这里我们依旧使用 & 来做拼接。

取值

你可以使用元素的序号来取代元素,最左边的index是1,其实是2,以此类推。可以使用这种方式来从列表中取值,也可以修改类表中值。

set testList to {"Neal", "haha"}

set item 2 of testList to "yang"

get testList

对于第二句,同样的效果还有:

set the second item of testList to "yang"

set the 2nd item of testList to "yang"

简直和英语一毛一样有么有。但是注意上面这种一字母拼写的序 数词最多只能使用到“tenth”,

之后,就要使用“item 11”的形式。或者写成 “11th item”的形式。

除了使用序数词,还可以使用“last item”指代列表中最后项目。

所以,当你只操作列表中最后一个值的时候,你不必知道列表具体有多少项目。

AppleScript允许你以相反的方向来指代元素,也就是可以从右向左数。这需要你使用负数,-1 指代最后一个元素,

-2指代倒数第2个元素。例[11]可以获得和例[10]一样的结果

set myList to {"neal", "haha"}

set valueOfLastItem to item -1 of myList

下面展示下,如何一次去多个值。

set myList to {"a", "b", "c", "d", "e", "f"}

set shortList to items 2 through 5 of myList

是的,上面就是运行结果为: {"b", "c", "d", "e"}

reverse

set reversedList to reverse of {2, 3, 4, 6, 7}

{7, 6, 4, 3, 2}

获取数组长度

set theListLength to the length of {"ds", 1, 2, 3}

set theListLength to the count of {"ds", 1, 2, 3}

the length of 和 the count of 效果是一样的。就是获取列表的长度

随机取值

set x to some item of {1, 2, 3, 4, 5, 7, 7, 6, 5}

随机返回列表中的任一元素

类型转换

set myList to {"a"}

set myString to "b"

--set result to myList & (myString as list)

set result to myList & myString

感觉可以对于js学习,弱类型语言都可以自动类型转换的。

除了通过类型转换将一个字符串变成一个列表,你还可以创建一个列表,列表的元素是组成字 符串的每一个字母。

set itemized to every character of "Nealyang"

{"N", "e", "a", "l", "y", "a", "n", "g"}

相比于单词,我们还可以把一个句子按照单词分开。这里我们可以使用苹果脚本的去限器( AppleScript’s text item delimiters)实现

首先定义一个字符作为分割文本的标记,以这个标记 分割出来的元素将被包含在列表里。

优秀的脚本编写要求如果苹果脚本文本去限器的值被更改了,一旦完 成任务还要将它改回原来的值

set myString to "neal's personal website is www.nealyang.cn"

set oldDelimiters to AppleScript's text item delimiters

set AppleScript's text item delimiters to " "

set myList to every text item of myString

set AppleScript's text item delimiters to oldDelimiters

get myList

{"neal's", "personal", "website", "is", "www.nealyang.cn"}

注意这里设置完 AppleScript's text item delimiters 后,分割用 every text item of 不是every character of

空格 " "我们是可以自定义的。类似js中split

record

理解为js中的对象吧

set stringToBeDisplayed to "Neal is pretty boy"

set tempVar to display dialog stringToBeDisplayed buttons {"So,so", "Don't know", "yes"}

set theButtonPressed to button returned of tempVar

display dialog "You pressed the following button " & theButtonPressed

上面的 button returned of 就是取值的语句。

因为dialog按钮按下后会返回如下格式:{"button returned":"xxxx"}

简单的操作如下:

set test to {neal:"yang"}

set lala to neal of test

注释

注释很简单

-- 注释一行

# 注释一行

(xxx) 注释多行

条件语句

我们把“if...then”指令叫做“条件语句”(conditional statement)。请注意,条件语句 还需要一个“end if”收尾。

比较简单,直接上代码吧:

set ageEntered to 73

set myAge to 24

if ageEntered is myAge then

display dialog "You are as old as I am "

beep

end if

say "this sentence is spoken anyway"

当然,我们也可以在 if ... then ... 和 end if 之间加上 else 关键字。

如果“if...then”指令和要执行的语句写在同一行,那么就不再需要“end if”

错误捕获

意外的终止是我们所不希望的。比如,你的脚本需要打开一个文件夹处理其中的文件, 但是这个文件夹已经被删除了,你会希望脚本允许用户选择其它合适的文件夹,而不是意外退出。

你可以把这些可能引起运行错

误的语句放入“try...end try”模块中

try

set x to 1 / 0

on error the error_message number the error_number

display dialog "Error: " & the error_number & "." & the error_message buttons {"OK"}

end try

Error: -2701.1.0 不能被零除

如果你在“on error”指令后面放上一个变量名,那么错误描述信息将被赋给这个变量。如果你 在变量名前面加上“number”字样,那么错误代码将被赋给变量。

路径、文件夹和应用程序

先是硬盘,硬盘下面包含文件夹、应用程序和文件(上图中没有显示出文件和应用程序)。所 有这些元素按照一定的层次组织起来。

这样我们就可以通过路径(path)这个概念来确定一个文件 的位置

运行

choose folder

alias "Macintosh HD:Users:Nealyang:Documents:code:code-work:huilianyi:hooks:"

你可以发现,路径一般的都符合这样的格式:

硬盘:文件夹:子文件夹:子文件夹:

tell application "Finder"

open folder "Macintosh HD:Users:Nealyang:Documents:code:code-work:huilianyi:hooks:"

end tell

注意上面的alias。假如我在桌面上为“Documents”文件夹中的文件“report.cwk”创建了一个替身。如果今后我 移动“report.cwk”到其它位置,或者把它重命名为“funny_story.cwk”,双击替身依然能够打开这 个文件。这是因为替身并不以“Macintosh HD:users:Documents:report.cwk”的方式记录文件 “report.cwk”

的存储位置(和名字),而是记录这个文件的ID。

为了避免因为文件被移动或改名造成的脚本运行中断,我们应当让脚本记录文件的ID而不是 “符号链接”的路径

set thePath to alias "Macintosh HD:Users:Nealyang:Documents:code:code-work:huilianyi:hooks:README.md"

## 重复(循环)

关键字 repeat ... end repeat

列出所选文件夹中所有的文件夹名称

set folderSelected to choose folder "Select a folder"

tell application "Finder"

set listOfFolders to every folder of folderSelected

end tell

set theList to {}

repeat with aFolder in listOfFolders

set temp to the name of aFolder

set theList to theList & temp

end repeat

## 函数

这个比较简单,容易理解。

on test(lala)

display dialog lala

end tst

test("haha")

上面就是定义了一个test函数,然后下面是调用

下面一个return的例子

on largest(a, b)

if a > b then

return a

end if

return b

end largest

set theLargetst to largest(4, 6)

结束语

如上就是AppleScript大概的基本知识,如果对他感兴趣,就赶快动手来写一写有意思的Mac脚本吧~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AppleScript 简明基础教程 iDoraemon Nathan 编著 目录 第一章 AppleScript入门! 第一节 什么是AppleScript! 第二节 AppleScript的工作机制! 第三节 AppleScript的用途和它带来的好处! 第四节 和AppleScript有关的程序和设置! 第五节 Automator和AppleScript! 第二章 快速上手AppleScript编辑器! 第一节 挖掘实用的功能! 第二节 脚本的存储格式! 第三节 支持AppleScript的应用程序! 第四节 AppleScript的录制功能! 应用实例1:建立100个子文件夹! 第三章 AppleScrip语言初步! 第一节 对象、属性和命令! 第二节 标识符和关键字! 第三节 数据类型! 第四节 强制数据类型转换! 第五节 运算符! 第六节 提取对象中的元素! 第七节 添加注释和括号! 第八节 代码缩写! 第四章 读懂AppleScript字典! 第一节 打开特定应用程序的AppleScript字典! 第二节 读懂AppleScript字典! 第五章 变量和属性! ! Nathan编著 3  第一节 变量的概念! 第二节 全局变量和局部变量! 第三节 数据共享机制! 第四节 属性! 第五节 预定义变量! 第六章 流程控制语句! 第一节 Tell语句! 第二节 条件语句If! 第三节 循环语句! 第四节 Considering/Ignoring语句(用于文本比较)! 第七章 基本用户交互! 第一节 简单对话框和输入框! 第二节 警告对话框! 第三节 列表选择对话框! 第四节 文件选择对话框! 第五节 其他用户交互! 第八章 错误处理! 第一节 基本的Try语句! 第二节 带有错误处理的Try语句! 第三节 AppleScript中的错误(Error)! 第四节 超时(Timeout)! 第九章 文件操作! 第一节 Alias类型! 第二节 相对路径和POSIX路径! 第三节 文件读取! 第四节 文件写入! Nathan编著 4 第十章 事件处理器! 第一节 基本的事件处理器! 第二节 带参数的事件处理器! 第三节 返回值! 第四节 run和open事件处理器! 第五节 保持打开的脚本应用程序! 第六节 文件夹操作! 第十一章 脚本对象! 第一节 me关键字! 第二节 编写和使用基本的script对象! 第三节 载入和调用外部script对象! 第四节 修改外部script对象中的属性变量! 附录一:AppleScript保留关键字! 附录二:预定义的错误代码和错误信息! AppleScript错误:! Mac OS系统错误! 后记!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值