2012-04-12 160 views
8

在applescript中,我收到了一个我必须打开的文件路径。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 

- >我” m到处错误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 

我不能使用synthax open.xyz来的......因为我收到此作为一个参数。

请帮我绝望:“(

:根据答案,我结束了这一点:

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

我强烈建议您避免使用此解决方案。它很脆弱,速度较慢,而且完全没有必要。使用@ kopischke的答案:http://stackoverflow.com/a/10132641/754997 – 2013-06-20 01:18:54

回答

14

你的问题在这里是双重的:

  1. 您的路径是在POSIX的符号,其中的AppleScript不能强迫到别名文件对象接受的搜索,因为这些将仅被隐式地从在HFS符号(Users:xxx:my:file:to:open.xyz)路径串创建。明确声明你的路径为POSIX文件将解决此问题。但是,
  2. 你来查找电话前缀文件的路径,但Finder的AppleScript字典中不包含文件对象类型(有一个文档文件对象,但它是取景器项目的孩子无法在此调用中创建)。删除该部分将解决问题。

TL; DR:下面一行将打开通过在默认程序的POSIX路径给定的文件而不求助于壳:

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

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

+1

另一种说法是,你不告诉应用程序打开文件,你告诉他们打开文件。 “文档”和“窗口”仅存在于内存中,并且是作为打开文件的结果而创建的。 – 2013-06-20 01:15:10

+0

@kopischke,你如何使用'open POSIX file'相对于'〜'? – 2015-05-27 00:15:44

+0

你不知道,AppleScript POSIX路径只能作为合格的路径使用,因为HFS路径强制是非常天真的(即它将'〜/ my/path'转换为':〜:my:path')。如果您需要相对的POSIX路径,您可以深入研究AppleScript-ObjectiveC API,该API不在评论的范围内,或者在其他答案中描述过。正如OP的问题指定了完全合格的路径,我的答案是,但我会添加一个免责声明。 – kopischke 2015-05-31 16:14:00

0

尝试:

set dstfile to "~/xxx/my/file/to/open.xyz" 
do shell script "open " & dstfile & "" 
+0

向下投票:我强烈建议您避免此解决方案。它很脆弱,速度较慢,而且完全没有必要。使用@ kopischke的答案:http://stackoverflow.com/a/10132641/754997 – 2013-06-20 01:16:34

相关问题