我的AppleScript需要检测自己的文件名,以下内容在Snow Leopard上运行正常(10.6)
set my_name to name of me as string
display dialog "Name: " & my_name
当我从AppleScript编辑器运行它时显示“名称:AppleScript编辑器”,当我将其保存为名为NewTest的应用程序时,它会显示“Name:NewTest”。
当我在Leopare(10.5)机器上运行它时,它会抱怨“无法将<>的名称改为类型字符串”。当我删除“as string”部分时,它在脚本编辑器下运行,返回“Name:Script Editor”,但当保存为应用程序时,它会出错,并说“无法获取名称”。
在脚本编辑器中运行并在10.5下保存为应用程序有什么不同?
答案 0 :(得分:3)
Applescript应用程序不是最真实意义上的“应用程序”。许多情境都会发生变化,例如“get path to me”在作为脚本或应用程序运行时将会有所不同,因为它们仍然是很好的,而不是基于Carbon或Cocoa的应用程序。针对Finder运行类似的代码...
tell application "Finder"
set my_name to name as string
display dialog "Finder: " & my_name
end tell
...表现得如预期,因为Finder是基于Carbon / Cocoa的应用程序。
我没有真正的答案,除了说这听起来像操作系统相对于10.6中的Applescript框架所做的更改使得对“me”的调用表现得更像预期。
我建议您阅读the section in the Applescript guide about the me
and it
keywords,以便更深入了解me
的工作原理。
答案 1 :(得分:3)
这是另一个想法,虽然我没有检查。可能导致问题的一件事是命令“get”。一般来说,当你运行像“我的名字”这样的命令时,命令get是隐含的,所以你真的在运行“得到我的名字”。问题是隐含的“获取”并非总是如此。所以有时你必须明确地说“得到”。每当我遇到像你这样的问题时,我尝试的第一件事就是在命令中添加“get”......它会成为习惯,因为你永远不会知道。请注意,您始终可以使用单词get并且永远不会遇到该问题。因此,请尝试将命令更改为“将my_name设置为(获取我的名字)”。我有兴趣知道是否能解决你的10.5问题。另请注意,名称已经是字符串,因此无需将结果强制转换为字符串。
修改强> 我查看了一些较旧的脚本。我使用以下代码来获取名称。在我的笔记中,我有这些评论......
- 这将获得没有任何文件扩展名的应用程序或脚本的名称
- 使用路径完成,因为当从脚本菜单运行脚本,并且将set myName写入我的名字时,结果是“applescript runner”而不是实际名称
- 它还确保您获得Finder中显示的名称,因为有时系统事件进程名称与Finder名称不同
on getMyName()
set myPath to path to me as text
if myPath ends with ":" then
set n to -2
else
set n to -1
end if
set AppleScript's text item delimiters to ":"
set myName to text item n of myPath
if (myName contains ".") then
set AppleScript's text item delimiters to "."
set myName to text 1 thru text item -2 of myName
end if
set AppleScript's text item delimiters to ""
return myName
end getMyName