Scripting Applescript:如何使用默认程序打开文件?

Scripting Applescript:如何使用默认程序打开文件?,scripting,applescript,Scripting,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 -->我得到了1728

在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
-->这里也一样

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
尝试:


你的问题有两方面:

  • 您的路径使用POSIX表示法,AppleScript无法强制将其转换为查找程序可接受的别名或文件对象,因为这些只能通过HFS表示法(
    Users:xxx:my:file:to:open.xyz
    )中的路径字符串隐式创建。将您的路径明确声明为POSIX文件将解决此问题。但是
  • 对Finder的调用将文档作为路径的前缀,但Finder的AppleScript字典不包含文档对象类型(存在文档文件对象,但它是Finder项的子项,无法在此调用中创建)。删除该部分将解决此问题
  • TL;DR:以下行将打开默认程序中通过POSIX路径给定的文件,而无需求助于shell:

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

    警告:这是最简单的解决方案,但它只适用于合格的POSIX路径(即以
    /
    开头的路径),如问题中的路径。处理相关路径(即以
    ~
    开头的路径、
    开头的路径)Oth需要AppleScript ObjectiveC API(不完全是琐碎的)或shell(从您的引用中获得乐趣)。

    另一种说法是,您不告诉应用程序打开文档,而是告诉他们打开文件。“文档”和“窗口”只存在于内存中,并且是打开文件后创建的。@kopischke,相对于
    ~
    ,如何使用
    打开POSIX文件
    ?如果不使用,AppleScript POSIX路径只能作为限定路径使用,因为HFS路径强制非常简单(即它将
    ~/my/path
    转换为
    :~:my:path
    )。如果您需要相对的POSIX路径,您可以深入研究AppleScript ObjectiveC API,该API不在注释范围内,或者shell out,这已在其他答案中进行了描述。由于OP的问题指定了一个完全限定的路径,我的答案是正确的,但我将添加一条免责声明。此答案显示了一种确定主目录的方法h(~)一般来说:否决票:我强烈建议您避免使用此解决方案。它很脆弱、速度较慢,而且完全没有必要。请使用@kopischke的答案:否决票:否决票:@ChrisPage我认为不应该否决一个实际可行的解决方案,
    do shell script
    对于所有棘手的任务来说肯定是一个有用的命令。赞成票:我需要在默认应用程序中打开一个文件,并具有相对路径,如
    ~/Desktop/test screenshots.tgz
    。接受的答案不起作用-正如他们在警告中指出的那样。此解决方案确实起作用。即使它不是答案,这确实是一个很好的答案。它很脆弱,因为它缺少正确的引用-如果路径包含空格或其他特殊的shell c哈斯,这是行不通的。这个答案显示了一个更干净的方法:我强烈建议你避免使用这个解决方案。它很脆弱,速度较慢,而且完全没有必要。请使用@kopischke的答案: