Applescript 关于别名的疑问

Applescript 关于别名的疑问,applescript,alias,Applescript,Alias,我在applescript文档中读到-‘alias’是一个关键字,表示 编译(即检查语法)时,脚本应记住文件的ID,并且在执行时,不应要求查找程序在定义的路径指定的位置查找文件,而是基于ID 所以我决定用这个脚本来玩它- set samplePath to alias "Mac:Miraaj:eCBTMood:anim1.png" tell application "Finder" open samplePath end tell 我编译了这个脚本并将其保存为AppleScript应用

我在applescript文档中读到-‘alias’是一个关键字,表示 编译(即检查语法)时,脚本应记住文件的ID,并且在执行时,不应要求查找程序在定义的路径指定的位置查找文件,而是基于ID

所以我决定用这个脚本来玩它-

set samplePath to alias "Mac:Miraaj:eCBTMood:anim1.png"
tell application "Finder"
    open samplePath
end tell
我编译了这个脚本并将其保存为AppleScript应用程序。我通过双击来执行它,它打开了正确的文件。然后我将文件名更改为anim2.png,并重新执行应用程序。我认为它应该再次打开同一个文件,但它给出了以下错误:

文件Mac:miraj:eCBTMood:anim1.png是 找不到

如果我做了什么错事或对“alias”的解释有误,有人能建议我吗

谢谢


Miraaj

文档是错误的,或者至少措词不当。Applescript应用程序不会在运行时之间保存这些信息;我不知道有哪个应用程序会保存这些信息,除非开发人员明确这样做

如果该位置是硬编码的,并且在脚本调用别名时文件位于正确的位置,则可以将该别名移动到任何位置,这样就可以了。同时,重命名文件会导致后续操作失败,这就是为什么我认为文档的措辞很糟糕的原因。最后,一旦你退出,所有的信息都会消失


我在脚本中一直使用
alias
,但我从未见过它在运行时之间“自动”管理文件位置。我必须始终将文件放在脚本中指定的确切位置。

如果将别名设置为属性而不是简单变量,则此操作将有效

我复制了您的脚本并复制了您注意到的行为:如果文件被移动或重命名,脚本将无法再找到它

然后我将脚本修改为:

property samplePath : alias "Mimosa:Users:jerry:Desktop:Lost Cities"
tell application "Finder"
    open samplePath
end tell
现在,脚本应用程序能够在移动文件时找到它。当我重新命名它时,它能够找到这个文件

我认为,不同之处在于,属性在保存时和实例之间保存在应用程序中,但每次都需要从原始路径重新创建简单变量,如果原始路径失败,这将不起作用

考虑这种变化:

set samplePath to alias "Mimosa:Users:jerry:Desktop:Lost Cities"

on idle
    global samplePath
    tell application "Finder"
        open samplePath
    end tell
    return 30
end idle
它的设置与您的类似,但脚本每30秒重复一次(保存为“保持打开”以获得此行为)。如果关闭文件,然后将其移动,脚本将在下一次迭代中找到该文件。如果重命名文件,它也会找到它

这是因为脚本不必重新解释原始文件路径。它使用保存的别名,即使文件移动或重命名,该别名也会保持自身

一旦它必须返回到您的脚本文本,它就会失败;即使使用“属性”变体,如果我再次在AppleScript编辑器中打开脚本,链接也会断开,因为它随后会尝试重新解释原来的、现在不正确的路径