• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

高级AppleScript技术

我们之前提供了AppleScript 的基本介绍,本文将介绍一些有用的 AppleScript 提示和技巧,以帮助您创建一些令人惊叹的高级脚本

这是一系列帖子的一部分,这些帖子重温了我们读者过去最喜欢的一些教程,这些教程仍然包含您可能会发现有用的很棒的相关信息。这篇文章最初发表于 2009 年 9 月 24 日。

首先,做你的功课

这是我关于自动化系列的第三篇文章。请务必查看我的AppleScriptAutomator初学者指南,以大致了解脚本和自动化。

在这些文章中,我介绍了变量等基本函数,为了减少冗余,我不会在这里解释这些函数。在您熟悉了基本的 AppleScript 之后,您就可以开始学习这些好东西了。让我们开始吧!

如果和如果,否则

“If”和“if, else”语句用于当您希望脚本仅在满足规定的要求时执行某个命令或命令集时。

例如,假设您希望脚本告诉您两个变量 x 和 y 的值是相等还是不同。您将使用“if”语句来告诉脚本如何对每种情况做出反应。

只有三种可能性:x 大于 y、y 大于 x 或 x = y。让我们从一个基本的“if”语句开始,随着我们的进行,它会变得更加复杂。

[applescript]
--Declare Variables
set x to 5
set y to 78

--Run if Statement
if x < y then
return "yes"
end if
[/applescript]

在这里,我首先声明了两个变量并为每个变量赋值。然后我告诉脚本编辑器在 x 大于 y 时返回“yes”。注意“if”语句的结构很像一个tell块。必须以“end if”结束每个“if”语句,否则您的代码将无法编译。

您以“end if”结束每个“if”语句,否则您的代码将无法编译。

该语句的基本结构如下: 如果(给定语句)为真,则执行以下操作。请务必在“if”所在的行中包含要测试的语句和“then”。

然后在结束该块之前将您的说明放在下一行。如果编译并运行上面的语句,脚本编辑器应该返回“yes”,表明 x 实际上小于 y。如果 x 大于 y,则什么都不会发生,因为我们还没有针对这种意外情况进行编程。让我们尝试一些更复杂的东西。

[applescript]
--Declare Variables
set x to 78
set y to 5

-- 运行 if 语句
if x < y then
return "yes"
else
return "no"
end if
[/applescript]

在这里,我们包含了一个“else”语句,它告诉脚本编辑器在初始条件语句为假时要做什么。结构如下:如果(给定语句)为真,执行动作a,否则执行动作b。

这对于很多情况来说已经足够了,但是我们还没有为我们的第三种情况创建一个偶然性:x = y。为此,我们将使用“else if”。

[applescript]
--Declare Variables
set x to 5
set y to 5

--运行 if 语句
if x < y then
return "x is less than y"
else if x > y then
return "x is greater than y"
else
return "x is equal to y"
end if
[/applescript]

在这里,我们允许所有三种不同的场景ios运行此脚本应返回“x 等于 y”。请注意,最后一个场景只需要“else”而不是“else if”。这是因为如果前两个陈述是错误的,那么 x = y 一定是这种情况(除非有任何输入错误)。

布尔值

为变量分配真值很容易。只需将变量设置为 true 或 false。

[applescript]
将 theBoolean 设置为 false

如果 theBoolean = true 则
返回“它是真的!”
else
return "That's just not true"
end if
[/applescript]

现在只知道这很容易。我们将在最后一个示例中看到更实际的用途。

显示对话框

AppleScript 让向用户显示输出变得超级简单。只需键入以下内容:

[applescript]
显示对话框“问候!”
[/苹果脚本]

这应该会生成一个显示您的问候语的简单窗口和两个按钮:“取消”和“确定”。也可以使用以下代码自定义这些按钮:

[applescript]
显示对话框“你好吗?” 按钮 {"Great", "Horrible", "不关你的事!"} 默认按钮 3
[/applescript]

这段代码分为三个部分。第一部分显示一个带有文本“你好吗?”的对话框。第二部分确定对话框将有多少个按钮以及它们会说什么。在这种情况下,我们有三个按钮。请注意,一组按钮必须用括号括起来,并且每个按钮都用引号括起来。

请注意,一组按钮必须用括号括起来,并且每个按钮都用引号括起来。

高级AppleScript技术  第1张
结果对话框

最后,第三部分告诉对话框默认按钮应该是什么。将默认按钮设置为 3 会在显示对话框时突出显示第三个按钮。

拥有一个带有多个按钮的对话框很棒,但除非您知道如何使用从用户那里收到的输入,否则它并不好。让我们把刚刚学到的关于对话的知识与“if, else”语句结合起来,看看我们如何使用对话来进行……嗯……对话。

[
applescript] --创建一个带有3个按钮的对话框
显示对话框“你好吗?” 按钮 {"Great", "Horrible", "不关你的事!"} 默认按钮 1


--如果结果 = {button returned:"Great"}用户很棒,则
显示对话框“Excellent,继续好先生”

--如果用户是可怕的
,否则如果结果= {按钮返回:“可怕”}然后
显示对话框“你需要振作起来!”

--如果用户是个混蛋
,则
显示对话框“对不起,伙计!”
如果结束
[/applescript]

如您所见,最初的代码行直接取自上面的示例。下一部分使用“if, else”语句来处理每个按钮按下。语法本质上是:如果用户按下按钮 x,则执行动作 a,否则如果用户按下按钮 y,则执行动作 b,否则执行动作 c。

如果用户按下按钮 x,则执行动作 a,否则如果用户按下按钮 y,则执行动作 b,否则执行动作 c。

从用户接收文本输入

有时一个简单的按钮是不够的。我经常编写需要用户输入文本的脚本。为了做到这一点,我们使用了一个类似上面的对话框,语法略有不同。

[applescript]
--显示对话框和获取输入
显示对话框“你好吗?” 默认答案“告诉我你的感受”

--Get Answer & Return Comment
将 theAnswer 设置为(结果返回的文本)
显示对话框“我很高兴你有这样的感觉”和 theAnswer
[/applescript]

通过将“默认答案”放入我们的代码中,我们告诉 AppeScript 我们希望用户输入文本作为响应然后我们为用户返回的文本设置一个变量。然后我们可以在任何我们想使用输入的地方使用该变量。

高级AppleScript技术  第2张

从用户接收文本输入

处理错误:Try 块

让用户输入数据是危险的。如果您正在寻找一个非常具体的答案或数据类型,您可以确定您的用户会搞砸并导致错误。

如果您正在寻找一个非常具体的答案或数据类型,您可以确定您的用户会搞砸并导致错误。

出于这个原因,您需要过滤来自用户的内容,以确保它正是您想要的输入类型。为此,我们将使用一个 try 块和几个“if”语句。

[applescript]
--显示对话框和获取输入
显示对话框“选择一个数字1-10”默认答案“只输入小于11的数字!”

--测试无效字符
尝试
将答案设置为(结果返回的文本)作为
错误
显示对话框“无效输入”
返回
结束尝试的数字

--Test for Correct Numbers
if theAnswer < 1 然后
将 theTest 设置为 0
else if theAnswer < 11 然后
将 theTest 设置为 1
else
将 theTest 设置为 0
end if


--如果 theTest = 0 则向用户返回评论,然后
显示对话框“无效输入”
,否则
显示对话框“您选择了数字”& theAnswer
end if
[/applescript]

上面的代码很复杂,让我们分解一下。第一部分只是显示一个对话框并要求用户选择一个数字。但是,我们只想接受数字 1 到 10。如果输入了其他任何内容,我们想告诉用户输入无效。

第二部分是我们测试是否输入了任何非数字,例如字母或符号。try 块允许我们告诉 AppleScript 尝试执行代码并查看会发生什么。

try 块允许我们告诉 AppleScript 尝试执行代码并查看会发生什么。

在这里,我们告诉 AppleScript 尝试获取用户返回的文本并将其转换为数字。如果没有 try 块并且我们执行了这个命令,如果用户输入了一个字母或符号,它将抛出一个错误并结束程序。

但是,如果抛出错误,try 块允许我们给 AppleScript 一个特殊的命令。在这种情况下,如果抛出错误,我们将显示“无效输入”对话框。然后我们通过键入“return”命令脚本结束。请注意,try 块必须以“end try”命令结束。

编程时,您必须始终考虑用户可能犯的每一个错误,并为此创建应急措施。尝试运行上面的代码并输入一些无效字符。可以看到,无论输入什么,脚本都只接受数字 1-10。

编程时,您必须始终考虑用户可能犯的每一个错误,并为此创建应急措施。

处理程序

与变量在一小段代码中存储大量信息的方式相同,处理程序(在其他编程语言中通常称为函数)是用很少的代码重复执行大量命令的好方法。

通过在一个片段中存储多个命令,您可以节省大量的编程工作并大大简化您的代码。这是一个例子:

[applescript]
--Define Handler
on additionHandler(theVariable)
set x to 5
set y to 5
set z to x + y + theVariable
display dialog "10 + " & theVariable & " = " & z
end additionHandler

--运行处理程序
additionHandler(8)

--Run Handler 再次
设置 theNumber 为 145
additionHandler(theNumber)
[/applescript]

定义处理程序的语法是:on HandlerName(variable),后跟要执行的命令,然后是“end handlerName”。

括号中的变量(theVariable)是我们每次运行处理程序时必须定义的部分。第一段代码本身不会做任何事情,因为我们还没有运行处理程序,只是定义了它。

请注意,当我们运行处理程序时,我们键入处理程序名称,后跟括号中的数字。处理程序现在将获取这个数字并将其插入到我们在处理程序定义中键入“theVariable”的任何位置。

在这种情况下,它会将所选变量设置为 z 并将其添加到 x(5) 和 y(5) 并显示一个带有答案的对话框。所以additionHandler(8) 将z 设置为8,然后加上10 (5+5) 并给我们18 的结果。当我们再次运行处理程序时,相同的代码在不同的数字上执行。

我这样做是为了向您展示您可以在其他地方定义一个变量并将其插入到您的处理程序中。在这里,我们将 theNumber 设置为 145,然后在 theNumber 上运行处理程序。

请注意,在处理程序内定义的任何变量都不存在于处理程序之外。所以如果你用“return z”结束这个脚本,你会得到一个错误,告诉你“z”没有定义。

确保为所有变量提供描述性和唯一的名称。

这意味着从技术上讲,您可以对在处理程序内部和外部定义的变量使用相同的变量名称。但是,这会导致代码混乱和混乱,应该避免。请务必为所有变量提供描述性和唯一的名称。

重复块

通常情况下,您会发现需要在脚本中创建一个重复给定次数的步骤。

在 AppleScript 中,我们使用重复块来完成循环。

许多编程语言称之为循环。在 AppleScript 中,我们使用重复块来完成循环。重复块相当简单和通用,这里有一个简单的例子:

[applescript]
将 theNumber 设置为 5

重复次数
显示对话框“这不是很烦人吗?”
结束重复
[/applescript]

在这里,我们创建了一个对话框并将其设置为连续重复五次。这个例子虽然没用,但向您展示了创建重复步骤是多么容易。

但是,您并不总是知道要重复给定步骤多少次。当某个条件保持为真时,通常需要重复一个步骤或一系列步骤。对于这些情况,我们使用“repeat while”块。

[applescript]
将 theNumber 设置为 1

重复 while (theNumber < 2)
显示对话框“再玩一次?” 按钮 {“是”,“否”} 默认按钮 1
如果结果 = {按钮返回:“是”} 然后
显示对话框“请插入更多季度!” 按钮 {"OK"} 默认按钮 1

否则
显示对话框“再见!” 默认按钮 2
将 theNumber 设置为 (theNumber + 1)
end if

结束重复
[/applescript]

在这里,我们设置了在 theNumber 小于 2 时重复的对话框。如果用户说他们想再次播放,他们会收到一条消息以插入更多的四分之一并且对话框重复。

只要用户不断点击“是”,对话框就会不断重复。当用户选择“否”时,我们将数字加一,将值设置为二。脚本看到真相要求已变为错误并停止重复该动作。

把它们放在一起

与其给你留下几段不相关的代码,我认为最好给出一个最终示例,整合我们上面学到的所有内容。让我们以上面的“选择一个数字”示例为例,将其充实为一个完整的工作脚本。

[applescript] --Set
Random Number将 randomNumber 设置为 1 到 10 的随机数

--Boolean 测试脚本是否应该重复
设置 repeatTest 为 true

-- 如果 Result 是一个数字,更改为 True 并查看数字是否在 1 到 10 之间,
将 testNumbers 设置为 false

--如果结果通过了所有以前的测试,是否正确?
将 winsTest 设置为 false

--Count 猜测数
设置 tryCount 为 0

--Generic Dialog Handler
on dialogBox(theMessage)
显示对话框
theMessage end dialogBox

-- 如果任何测试失败
则重复重复 while (repeatTest = true)
-- 显示对话框和获取结果
显示对话框“选择数字 1-10”默认答案“仅输入数字 1-10”默认按钮 2

将 theAnswer 设置为(结果返回的文本)

——结果是一个数字吗?
尝试
将 theAnswer 设置为 theAnswer 作为数字
将 testNumbers 设置为 true
on error
dialogBox("Invalid Input")
end try

-- Result 在 1 到 10 之间吗?
if (testNumbers = true) then
--Test for Correct Numbers
if theAnswer < 1 then
dialogBox("Invalid Input")
else if theAnswer < 11 then
set repeatTest
设置为 true
else
dialogBox("Invalid Input")
end if
end如果

——结果是正确的答案吗?
ifwinningTest = true then
if theAnswer = randomNumber then
dialogBox("You Guessed it in " & tryCount & " 尝试!")
else
dialogBox("再试一次!")
设置repeatTest 为true
设置tryCount 为tryCount + 1
end if
end if

结束重复
[/applescript]

乍一看,这个脚本可能看起来很吓人。但是,如果您已经浏览了上面的所有示例,那么这一切都应该是完全合理的。

第 1 步:声明变量

首先,我们声明我们的变量,此时主要是布尔值。然后我们创建一个处理程序(对话框)来在整个脚本中显示我们的各种对话框。然后要求用户选择一个介于 1 和 10 之间的数字。然后通过三个单独的测试来运行答案。

第 2 步:检查输入

接下来,我们测试一下输入是否包含字母或符号。然后我们测试看看用户返回的数字是否在可接受的范围内(1-10)。

第 3 步:输入是否与随机数匹配?

最后,我们测试一下用户的猜测是否与脚本生成的随机数匹配。

使用布尔值和 if 语句构建脚本,以便每个连续测试仅在输入通过前一个测试时运行。如果任何测试返回 false,则重复块将再次开始,并且不会运行以下操作。

嵌套

请注意,实际上可以在 if 语句中嵌套 if 语句。重复块和告诉块也是如此。小心不要过度使用嵌套语句。一两层深也不错,但除此之外的任何东西都会变得混乱且难以理解。

运行此脚本应该让您选择一个数字并继续猜测,直到您猜对为止。玩几次,看看你需要猜多少次才能猜对!

结论

本文介绍了如何使用 if 语句、布尔值、对话框、用户输入、处理程序、错误处理程序和重复块。

您现在应该具备创建一些非常精美的脚本的能力,这些脚本将自动化最艰难的工作流程只需将此页面添加为书签,并将其用作您未来所有脚本的备忘单。


文章目录
  • 首先,做你的功课
  • 如果和如果,否则
  • 布尔值
  • 显示对话框
  • 从用户接收文本输入
  • 处理错误:Try 块
  • 处理程序
  • 重复块
  • 把它们放在一起
    • 第 1 步:声明变量
    • 第 2 步:检查输入
    • 第 3 步:输入是否与随机数匹配?
    • 嵌套
  • 结论