我正在尝试在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"
。
我发现了一些相关的问题和页面,但我有点迷失,真的不明白为什么它不起作用。
感谢您的帮助!
答案 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_name
,name_extension
,extension_hidden
}中的下划线。当您查看带有下划线的“已编译”代码时,它看起来如下图所示:
因此,AppleScript将displayed_name
解释为变量,而不是属性。现在,如果您已在其他位置定义了这些变量,那就没问题了,例如在属性的脚本顶部。但如果没有,则需要删除下划线,因为Finder项目的属性名称中没有下划线。当您删除下划线时,颜色显示正确(属性为紫色,变量为绿色)。
请注意,如果没有扩展程序,仍然无法提供文件名。为此,您需要使用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