gpt4 book ai didi

applescript - 相对于当前脚本的位置动态加载 AppleScripts

转载 作者:行者123 更新时间:2023-12-04 03:17:24 27 4
gpt4 key购买 nike

我希望能够引用与 Controller 位于同一目录中的模型文件。

最初,它们位于项目的根文件夹中,但当它们被编译(使用 osacompile)时,它们都将位于 Controller.scptd/Contents/Resources/Scripts目录。

Controller .applescript:

property path :  (container of (path to me) as text) <-- Error: Can’t make container of alias "Macintosh HD:Users:craig:Projects:AppleScript:Foobar:Controller.applescript" into type text.
property model : load script file (path & "Model.scpt")

我无法使语法正常工作;我一直找不到可行的解决方案。有没有办法让这个工作?

** 编辑 **

如@dj-bazzie-wazzie 和@mklement0 所述,应用程序包上下文中的我的路径 指的是脚本包(Controller.scptd 在我的示例),而不是脚本本身(Controller.scptd/Contents/Resources/Scripts/main.scpt)。

假设 Model.scpt 已与 main.scpt 捆绑在 /Contents/Resources/Scripts 目录中,此语法有效:

set Model to load script (path to resource "Model.scpt" in directory "Scripts")

不幸的是,它不适用于非捆绑脚本;然而,@Michele-Percich 的解决方案将起作用。

是否有一种语法在两种情况下都适用?

最佳答案

属性在编译时被初始化(设置)并且它们的值是持久的。因此,即使您在那里有动态值,脚本也只会在最后一次编译脚本时保留命令/类的值。这里有一个属性如何工作的例子:

property a : current date
return a

您可以继续单击 AppleScript-Editor 中的运行按钮,但您会看到日期没有更新。这是因为当脚本编译时,编译器注意到 current date 并使用它的值。存储到属性中的不是对 current date 的引用,而是 current date 在编译时返回的值,这只是一个日期值。

您只需在每次启动脚本时加载脚本即可。

property model : missing value
set model to load script file ((path to me as string) & "Contents:Resources:Scripts:Model.scpt")

编辑:在问题更新后更新我的答案

如果你想使用库包内部和外部的库,如果你正在运行 Mavericks,我会看一下脚本库。当您使用 use 语句加载脚本库并且正在运行的脚本是一个包(另存为应用程序或脚本包)时,它将首先尝试从那里加载库。如果失败或脚本只是一个文件而不是一个包,它将从 4 个库文件夹(用户、计算机、网络、系统库并按此顺序)加载脚本库。

我写了a tutorial about how to write script libraries

关于applescript - 相对于当前脚本的位置动态加载 AppleScripts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24319663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com