使别名脚本失败

时间:2016-07-24 03:17:40

标签: macos path applescript alias

这里不经常使用AppleScript用户,因此这可能是非常基本的东西,但我似乎无法创建一个非常简单的脚本来创建新的别名文件工作。这是完整的脚本:

set source_file to "/path/to/test.txt"
set alias_file to "/path/to/test.txt alias"
tell application "Finder" to make new alias at alias_file to source_file

我已经尝试过,有没有“新”。我用文件名前面的“POSIX文件”和文件名后的“as POSIX文件”作为强制对象进行了尝试。我试过“at * to *”和“to * at *”。万一目的地需要是一个包含文件夹,我试过了。绝对所有变体都会产生相同的错误消息:

execution error: Finder got an error: AppleEvent handler failed. (-10000)

并没有告诉我很多。

我显然在这里用“/ path / to /”替换了实际的文件路径,但我可以确保ls /path/to/test.txt确认源路径有效,ls "/path/to/test.txt alias"确认目标路径确实不存在。

如果重要,我正在运行Mac OS X 10.11.5。 Finder.sdef条目确保它看起来应该做我想要的:

make v : Make a new element   make

new type : the class of the new element

at location specifier : the location at which to insert the element

[to specifier] : when creating an alias file, the original
  item to create an alias to or when creating a file viewer window,
  the target of the window

[with properties record] : the initial values for the properties of
  the element → specifier : to the new object(s)

我真正想做的是从命令行使用osascript运行它,我真正想要做的是从Python调用osascript单行程序,因此文件路径将是内联的,而不是变量。但我先移动到命令行,然后移动到脚本编辑器,因为我无法使它工作,并且调用此代码段的每个方法都会产生相同的错误消息。所以希望当/如果我得到一个脚本工作,我将能够从Python调用osascript中的等效代码。 :}

1 个答案:

答案 0 :(得分:4)

AppleScript represents file paths differently than POSIX does开始,你使用POSIX file肯定是在正确的轨道上(实质上是冒号而不是正斜杠)。

您可以手动将所有路径转换为AppleScript路径,但我认为,为了保持文件路径的可读性,我们可以将它们转换为更好的解决方案(并让您清楚地了解它们确实是文件路径的源代码) )。

然而,POSIX file的问题在于它返回文件引用而不是make new alias命令正在查找的文本路径。要解决此问题,您只需将返回的文件引用转换为text即可使alias满意:

set source_file to (POSIX file "/path/to/test.txt") as text
set alias_file to (POSIX file "/path/to/test.txt alias") as text
tell application "Finder" to make new alias at alias_file to source_file

还有一个问题:make new alias at x to y命令期望y成为文件的路径,x成为应该放置别名的目录的路径,但是您要将路径传递给xy的文件。目标(“at”)路径应为/path/to/ - make new alias命令将自动命名别名{original filename} alias。所以,总结一下:

set source_file to (POSIX file "/path/to/test.txt") as text
set alias_dir to (POSIX file "/path/to/") as text
tell application "Finder" to make new alias at alias_dir to source_file

这可能有点啰嗦,但我希望它有所帮助!