如何从Omnigraffle获取没有扩展名的文件名?

时间:2012-02-09 00:53:16

标签: macos path applescript

我正在尝试在Omnigraffle Professional 5中获取没有当前文档文件扩展名的文件名。

tell application "OmniGraffle Professional 5"
    set _document to front document
    set _path to path of _document

    -- Get filename without extension
    tell application "Finder"
        set {_filename, _extension, _ishidden} to the
             {displayed_name, name_extension, extension_hidden} of the _path
    end tell
end tell

这给了我以下错误:error "Can’t get displayed_name of \"/Users/ca/Downloads/Feb 8.graffle\"." number -1728 from displayed_name of "/Users/ca/Downloads/Feb 8.graffle"

我发现了一些相关的问题和页面,但我有点迷失,真的不明白为什么它不起作用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您需要将其更改为以下内容:

tell application "OmniGraffle Professional 5"
    set _document to front document
    set _path to path of _document

    -- Get filename without extension
    tell application "Finder"
    set {_filename, _extension, _ishidden} to the ¬
               {displayed name, name extension, extension hidden} ¬
                of ((the _path as POSIX file) as alias)
    end tell
    if (_extension ≠ missing value) then
        set baseName to text 1 thru -((length of _extension) + 2) of _filename
    end if

end tell

“前端文档的路径”返回文件的POSIX路径,该路径只是一个普通字符串。为了能够获取有关项目的信息,Finder将需要对相关文件的别名引用。传递普通字符串时会收到错误,因为普通字符串不具有这些属性。要获取别名,您需要先将普通路径强制转换为POSIX文件,然后将POSIX文件强制转换为别名。

除非您已在其他地方定义了这些变量,否则您需要删除{displayed_namename_extensionextension_hidden}中的下划线。当您查看带有下划线的“已编译”代码时,它看起来如下图所示:

enter image description here

因此,AppleScript将displayed_name解释为变量,而不是属性。现在,如果您已在其他位置定义了这些变量,那就没问题了,例如在属性的脚本顶部。但如果没有,则需要删除下划线,因为Finder项目的属性名称中没有下划线。当您删除下划线时,颜色显示正确(属性为紫色,变量为绿色)。

enter image description here

请注意,如果没有扩展程序,仍然无法提供文件名。为此,您需要使用text n thru m

执行与添加的行相似的操作
if (_extension ≠ missing value) then
    set baseName to text 1 thru -((length of _extension) + 2) of _filename
end if

答案 1 :(得分:1)

首先,您需要为您要定位的任何应用程序的属性使用正确的标签 - 这些可以在应用程序脚本字典中找到。接下来的问题是 Finder 对POSIX路径一无所知,这显然是 OmniGraffle 为文档路径返回的内容,因此您需要强制路径进入 Finder 确实知道的事情,例如别名。

tell application "Finder"
    set {_filename, _extension, _ishidden} to the {displayed name, name extension, extension hidden} of (_path as POSIX file as alias)
end tell