为什么Applescript在脚本编辑器中运行,但在保存为应用程序时出错?

时间:2010-07-27 21:45:32

标签: osx-snow-leopard applescript osx-leopard

我的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下保存为应用程序有什么不同?

2 个答案:

答案 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