【问题标题】:Applescript: How to open a file with the default program?Applescript:如何使用默认程序打开文件?
【发布时间】:2018-11-21 23:51:42
【问题描述】:

在一个 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

【问题讨论】:

标签: scripting applescript


【解决方案1】:

你的问题是双重的:

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

TL;DR:以下行将打开一个通过默认程序中的 POSIX 路径给出的文件,而不依赖于 shell:

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

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

【讨论】:

  • 另一种说法是,您不告诉应用程序打开文档,而是告诉它们打开文件。 “document”和“window”只存在于内存中,是打开文件的结果。
  • @kopischke,相对于~,您如何使用open POSIX file
  • 你不知道,AppleScript POSIX 路径只能作为合格路径工作,因为 HFS 路径强制非常幼稚(即它将 ~/my/path 转换为 :~:my:path)。如果您需要相对 POSIX 路径,您可以深入研究 AppleScript-ObjectiveC API,这超出了评论的范围,或者 shell out,已在其他答案中描述。由于 OP 的问题指定了完全合格的路径,因此我的答案是有效的,但我会添加免责声明。
  • 这个答案显示了一种确定主目录路径(~)的方法:stackoverflow.com/a/24152885/43615
【解决方案2】:

试试:

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

【讨论】:

  • 投反对票:我强烈建议您避免使用此解决方案。它很脆弱,速度较慢,而且完全没有必要。使用@kopischke 的答案:stackoverflow.com/a/10132641/754997
  • 赞成:@ChrisPage 我认为不应该反对一个真正有效的解决方案,do shell script 对于各种棘手的任务来说无疑是一个有用的命令。
  • 赞成:我需要在默认应用程序中打开一个文件,并且具有像 ~/Desktop/test-screenshots.tgz 这样的相对路径。正如他们的警告中所指出的,接受的答案是行不通的。这个解决方案可以。这确实是一个很好的答案,即使它不是答案。
  • 它很脆弱,因为它缺少正确的引用 - 如果路径包含空格或其他特殊的 shell 字符,它将不起作用。
  • 这个答案展示了一种更简洁的方法:stackoverflow.com/a/24152885/43615
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多