将变量设置为applet的路径时,请避免启动

时间:2015-07-24 21:29:39

标签: applescript

如果我将AppleScript中的变量设置为AppleScript applet或Droplet的路径,则会启动applet或droplet并执行run()处理程序。例如,我有

set thePath to path to application "HS Extract"

这将启动Droplet“HS Extract”。我还尝试将变量设置为应用程序作为别名,然后将变量设置为别名的路径以及所有失败的其他一些可能性。

如何在不启动Droplet或applet的情况下将变量设置为Droplet或applet的路径?

4 个答案:

答案 0 :(得分:2)

另一种查找方法是使用shell和元数据属性中的mdfind。这就像进行聚光灯搜索一样,此方法不应启动任何应用程序。

例如,应用程序具有com.apple.application-bundle的kMDItemContentType属性。如果我们将它与应用程序的名称结合起来,我们可以创建类似下面的内容来获取posix路径,然后将其转换为别名。

set appDisplayName to "HS Extract"
set posixPath to item 1 of paragraphs of (do shell script "mdfind \"kMDItemContentType == 'com.apple.application-bundle' && kMDItemDisplayName == " & quoted form of appDisplayName & "\"")
set thePath to (POSIX file posixPath) as alias

注意:您在jackjr300的帖子评论中提到了套件ID。包标识符具有kMDItemCFBundleIdentifier元数据属性。因此,如果kMDItemContentType和kMDItemDisplayName的组合不起作用(如我的示例代码中所示),那么您可以尝试使用kMDItemCFBundleIdentifier和kMDItemDisplayName。

答案 1 :(得分:1)

要不打开应用程序:使用 Finder 获取路径,这需要应用程序的包标识符。

set bundlId to id of application "HS Extract"
tell application "Finder" to set thePath to (application file id bundlId) as alias

或者您可以使用 NSWorkspace 方法获取路径,这不需要标识符

do shell script "/usr/bin/python -c 'from AppKit import NSWorkspace; print NSWorkspace.sharedWorkspace().fullPathForApplication_(\"HS Extract\")'"
set thePath to the result as POSIX file as alias

答案 2 :(得分:0)

如果要将其设置为字符串,那么,如果需要启动它,则强制转换为别名。

Set thePath to (choose file as string)
--gives you path string

您可以在变量中使用该字符串,但请使用

alias thePath

如果你需要。

答案 3 :(得分:0)

我更喜欢@ jackjr300的答案,但如果这个脚本供私人使用,property似乎有效:

property appPath : path to application "HS Extract"
display dialog appPath as string

仅在编译脚本时启动应用程序。请注意,该属性为alias

该脚本将跟踪原始HS Extract,即使它稍后重命名为其他内容。