我正在努力AppleScript 1-2-3(2009)似乎无法运行这个例子:
tell application "Finder"
close every window
open home
set toolbar visible of the front Finder window to true
set the sidebar width of the front Finder window to 135
set the current view of the front Finder window to column view
set the bounds of the front Finder window to {36, 116, 511, 674}
set folder "Documents" of home
set toolbar visible of the front Finder window to false
set the current view of the front Finder window to flow view
set the bounds of front Finder window to {528, 116, 1016, 674}
select the last finder window
end tell
解析器在执行set folder
命令时卡住了,告诉我“行尾不能位于此属性之后”。除非我搞砸了(完全有可能),或者这本书就是错的,否则语言自 2009 年以来一定发生了变化。如果是这样,那是怎么回事?
更新:答案和评论(值得一读!)让我相信这些书是错误的。
答案1
为了回答你关于 AppleScript 自 2009 年以来可能发生了哪些变化的具体问题,我不会试图猜测它自那时以来可能演变的无数方式(我找不到 2009 年或之前的语言文档),但我可以强调当前的表述,因为它与你的代码片段有关。也就是说,你的脚本在哪里抛出错误,语法错误在 中set folder "Documents" of home
。
set
该命令在 AppleScript(当前版本)中的定义方式是:
[为了]分配[的]一个或多个变量的一个或多个值。
它的语法如下:
放 变量模式 到 表达
其中variablePattern
是变量或变量列表的名称,并expression
计算将分配给变量的值。
(注:AppleScript 语言指南声明的后半部分,即to %expression%
,是可选的。但是,我想不出一个这样的例子,而且据我所知,set
必须总是遵循上面概述的完整语法。也许这是语言发生变化的方式之一……?)
因此,简单地说,set
总是习惯于取某物的价值和分配给另一个,就像代码片段的所有其他行一样。
在以下行中:
set folder "Documents" of home
我们只有一半的声明:命令首先提供一个对象(在本例中是一个文件夹),该对象希望获得一个新值,但随后并没有继续说明这个新值应该是什么。
此外,folder
对象本身通常不能被赋值。不能命令:
set folder "Documents" of home to desktop
然而,能将对象分配folder
给其他东西,例如变量或现有属性的值,例如target
的属性Finder window
:
set the target of the front Finder window to folder "Documents" of home
该set
命令指示 AppleScript 使用表达式的值folder "Document" of home
(其计算结果为硬盘驱动器上的位置引用)并将其分配给属性target
(front Finder window
控制窗口中显示哪个目录)。正如您所期望的,这会导致活动目录的目录发现者窗口切换家目录文件目录。
这似乎是一个不太可能出现的结果,因为将所有这些操作应用到一个单一的发现者窗口意味着前面几行有些多余:没有必要打开家文件夹并设置其属性(toolbar visible
、、sidebar width
和current view
)bounds
,然后更改目录并将所有这些属性设置为新值。
因此,我认为最有可能的解决方案是@wch1zpink他的回答是开启一个新的发现者窗口的位置文件文件夹。
我选择按照脚本中的方式执行此操作家文件夹:
open folder "Documents" of home
这会完全替换问题行。因此,生成的脚本在创建和操作两个窗口的方式上具有令人愉悦的对称性:
tell application "Finder"
activate
close every window
open home
set toolbar visible of the front Finder window to true
set the sidebar width of the front Finder window to 135
set the current view of the front Finder window to column view
set the bounds of the front Finder window to {36, 116, 511, 674}
open folder "Documents" of home
set toolbar visible of the front Finder window to false
set the current view of the front Finder window to flow view
set the bounds of front Finder window to {528, 116, 1016, 674}
select the last Finder window
end tell
open
显然,该命令会打开一个新的发现者窗口位于指定位置,而且还使该窗口成为新的发现者窗口正面发现者窗户。
从这里可以很容易地看出,第一组set
语句是针对一个发现者窗口;第二个块是另一个的。
希望我直接回答了您的问题并提供了合理的解释。如果我写的内容听起来有些居高临下,请原谅我:我尽量避免假设您对 AppleScript 了解多少或不了解多少,尽管有证据表明您显然不是新手(超级用户声誉为 2.5K)。另一方面,如果我写的内容含糊不清或解释不清,请告诉我,我会很乐意根据需要澄清或重新措辞。
答案2
如果您使用此行代码的意图 set folder "Documents" of home
是...让当前查找器窗口显示“Documents”文件夹,那么只需将此行替换set folder "Documents" of home
为以下内容...
set theFolder to folder "Documents" of home
open theFolder