在AppleScript中使用iMovie项目文件夹的正确路径是什么

在AppleScript中使用iMovie项目文件夹的正确路径是什么,applescript,Applescript,我正在编写一个简单的AppleScript,用于制作iMovie项目文件的副本。我已将此属性添加到脚本中: property iMovieProjects : alias (home directory of (system info) as string) & "Movies:iMovie Projects" 这给了我一个错误 未找到的文件别名Macintosh HD:Users:my用户名:Movies:iMovie项目 正确的路径是什么?我尝试了iMovie Project.lo

我正在编写一个简单的AppleScript,用于制作iMovie项目文件的副本。我已将此属性添加到脚本中:

property iMovieProjects : alias (home directory of (system info) as string) & "Movies:iMovie Projects"
这给了我一个错误

未找到的文件别名Macintosh HD:Users:my用户名:Movies:iMovie项目


正确的路径是什么?我尝试了iMovie Project.localized,但也不起作用。

试试这个,看起来你需要使用Finder。此外,我还对获取主路径进行了一些简化

property iMovieProjects : ""

tell application "Finder" to set iMovieProjects to alias ((home as string) & "Movies:iMovie Projects")
编辑:这里有一个不使用Finder的单行解决方案,它基于mklement0和regulus6633的想法

看起来这个文件夹是一种特殊的bundle类型的文件夹,这就是为什么我们需要finder来正确解析它。使用其完整的.localized名称解决此问题。

更新:正如adamh发现的,别名错误的原因是因为文件夹的真实名称是“iMovie Projects.localized”。获取有关文件夹的信息,您将看到它

我想补充一点,获取文件夹的一个更简单的方法是使用“path to”命令。使用它,您可以访问几乎所有已知的文件夹。在你的情况下,我们可以直接进入电影文件夹。您可以在标准添加的applescript字典中查看它知道的所有文件夹。因此,我将参考该文件夹,如下所示

set iMovieProjects to alias ((path to movies folder as text) & "iMovie Projects.localized:")
最后,您会注意到我没有将属性用于iMovie项目。这是因为编译脚本时,属性会将路径硬编码到脚本中。。。这意味着脚本将仅适用于此特定用户。如果脚本被其他用户使用,则在编译时仍将指向该用户的Movies文件夹。因此,我们不使用属性,脚本将适用于任何用户

祝你好运。

更新2(谢谢,@adamh):尽管iMovie项目文件夹名称在英语语言环境的Finder中显示为
“iMovie项目”
,但实际的独立于语言环境的名称是
“iMovie项目.本地化”
。(如果要通过文件夹的本地化名称引用文件夹,请在
set
命令前面加上
tell application“Finder”
,如@adamh的答案的第一个片段所示。)


您只需更改插入括号的方式-要传递给
别名的字符串必须完整地构建在括号内:

property iMovieProjects : ""
set iMovieProjects to alias ( ¬
 (home directory of (system info) as string) & "Movies:iMovie Projects.localized" ¬
 )
Update1:@regulus6633提出了一个极好的观点,即您不应该使用特定用户的路径初始化属性,因为它将被编译到脚本中。因此,上面的代码段将属性初始化为空字符串,然后在一个单独的
集中动态分配一个值,该值将反映当前用户的路径。。。到
语句

原始语句无意中创建了一个包含2个元素的列表,第一个元素是主目录的别名,第二个元素是字符串“Movies:iMovie Projects”


简化版,带有@regulus6633答案中所示的
命令路径(同样需要加括号):


+1获取有关路径的有用信息,但它并没有解决OP本身的问题,这源于事情是如何(不)插入括号的-请参阅我的答案。是的,我在您发布时重写了我的答案,因为我注意到“alias”没有按预期工作。一个假设的add'l+1用于指出属性初始化问题-注意,但是,这并不排除使用属性本身。不需要使用Finder来创建别名(而且,Finder返回的实例类与全局可用的
别名
类不同)-只要提供给全局
别名
的参数是表示现有文件的HFS样式路径,它就应该工作;e、 例如,
将a设置为alias((主文件夹的路径)作为文本)
-注意括号。我知道iMovie Projects.localized。我尝试将其用作文件夹名称,但出现了相同的错误。我将尝试将电影文件夹的路径设置为文本。至于属性,这个脚本只供我在MacBook上使用。我不关心其他用户。虽然您的解决方案可行,但不需要使用Finder—只需将此处括号中的相同方式应用于OP的代码—确保在将路径字符串传递给
alias
之前完整构建路径字符串—使其可行—请参阅我的答案。您好,我完全同意,但无法让您的答案生效,它会抛出一个“文件别名…未找到”错误。我仍然在10.7上,所以可能是这样的。这很奇怪——我不希望10.7有什么不同;即使是10.9的@regulus6633,和我一样,也有同样的问题。如果在我的命令前面加上
告诉AppleScript to
,会怎么样?如果只使用
(电影文件夹的路径作为文本)
作为
别名
参数,会怎么样?如果使用
osascript
运行,行为是否有所不同?我也不希望本地化问题在这里发挥作用。这是有效的:
将iMovieProjects设置为alias(电影文件夹的路径为文本)
这是一个奇怪的问题,您使用的是ScriptEditor还是其他什么?我使用的是常规的AppleScript编辑器。如果在错误发生时查看“回复”选项卡,您会看到什么?你从这个例子中看到了什么?路径的文本表示是否以
结尾?如何
将iMovieProject设置为alias((以文本形式指向主文件夹的路径)和“Movies”)
?您的解释不适用于我的示例中的路径。我在“将iMovie项目设置为alias((电影文件夹的路径为文本)和“iMovie项目:”)时遇到错误。另外,我在这里给出的两个示例中遇到错误。很抱歉继续编写,但我使用的是10.9。这可能是它对你有效而对我无效的原因。@regulus6633:有趣。在OS X 10.9.2上运行得非常好-您正在运行什么?请注意,t
property iMovieProjects : ""
set iMovieProjects to alias ( ¬
 (home directory of (system info) as string) & "Movies:iMovie Projects.localized" ¬
 )
property iMovieProjects : ""
set iMovieProjects to alias ( ¬
    (path to movies folder as text) & "iMovie Projects.localized" ¬
  )