(旧?) 打开文件夹命令语法错误

(旧?) 打开文件夹命令语法错误

我正在努力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(其计算结果为硬盘驱动器上的位置引用)并将其分配给属性targetfront Finder window控制窗口中显示哪个目录)。正如您所期望的,这会导致活动目录的目录发现者窗口切换目录文件目录。

这似乎是一个不太可能出现的结果,因为将所有这些操作应用到一个单一的发现者窗口意味着前面几行有些多余:没有必要打开文件夹并设置其属性(toolbar visible、、sidebar widthcurrent viewbounds,然后更改目录并将所有这些属性设置为新值。

因此,我认为最有可能的解决方案是@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

相关内容