11

在一个applescript 中,我收到一个我必须打开的文件路径。

文件路径的格式为“ /Users/xxx/my/file/to/open.xyz”。

我想用默认程序打开它。如果是AVI,我需要用视频程序打开它,如果是xls,用excel,...

我尝试了几件事但没有成功:

--dstfile contains the previous path
tell application "Finder"
    activate
    open document dstfile
end tell

--> 我收到错误 1728,告诉我他无法获取文档

tell application "Finder"
    activate
    open document file dstfile
end tell

--> 这里也一样

tell application "Finder"
    activate
    open document POSIX file dstfile
end tell

--> 这里也一样

我确定该文件存在,因为我在执行此代码之前执行了此操作:

if not (exists dstfile) then
    display dialog "File isn't existing"
end if

我无法使用 to of... 的合成器 open.xyz,因为我将其作为参数接收。

请帮助我绝望:'(

答案:根据答案,我最终得到:

set command to "open " & quoted form of dsturl
do shell script command
4

2 回答 2

19

您的问题是双重的:

  1. 您的路径采用 POSIX 表示法,AppleScript 无法将其强制转换为 Finder 可接受的别名文件对象,因为这些只能从 HFS 表示法 ( Users:xxx:my:file:to:open.xyz) 中的路径字符串隐式创建。明确将您的路径声明为POSIX 文件将解决此问题。然而,
  2. 您对 Finder 的调用将文档添加到路径中,但 Finder 的 AppleScript 字典不包含文档对象类型(存在文档文件对象,但它是finder 项的子项,无法在此调用中创建)。删除该部分将解决问题。

TL;DR:以下行将在默认程序中打开一个通过 POSIX 路径给出的文件,而无需求助于 shell:

tell application "Finder" to open POSIX file "/Users/xxx/my/file/to/open.xyz"

警告:这是最简单的解决方案,但它仅适用于合格的 POSIX 路径(即以 开头的路径/),就像问题中的路径一样。~处理相对的(即以,.或开头的路径..)OTOH 需要 AppleScript-ObjectiveC API(不完全是微不足道的)或 shell(对您的引用感兴趣)。

于 2012-04-12T22:12:34.250 回答
3

尝试:

set dstfile to "~/xxx/my/file/to/open.xyz"
do shell script "open " & dstfile & ""
于 2012-04-12T15:39:53.957 回答