JSL 识别当前运行脚本的路径运行脚本时(从脚本窗口或从加载项触发它)我希望能够(1)获取脚本窗口所在目录的位置或(2)获取包含脚本的加载项的 id。 JMP 知道这一点,因为它必须打开脚本才能开始执行。 有没有办法做到这一点?
我知道我可以通过使用 $ADDIN_HOME(id) 在加载项上下文中执行此操作。 这里的问题是我有一个常见的包含,我将其打包在多个加载项中,并且我不想为每个不同的加载项更改文件。 我可以看到自己不小心将通用包含从外接程序 #1 复制到外接程序 #2,并且忘记更改包含中的 id,以便它使用外接程序 #2 中的正确路径。
回复:JSL 识别当前运行脚本的路径还有一个内置函数可以在 POSIX 和 Windows 路径分隔符之间进行转换:

回复:JSL 识别当前运行脚本的路径谢谢杰夫,这太棒了!
不过,我确实找到了另一个解决方案:我将脚本保存在与当前数据表相同的目录中,然后获取数据表的路径:
dt = Current Data Table();
path = dt<< getpath;
生成的“路径”是我的带有反斜杠的目录路径
回复:JSL 识别当前运行脚本的路径我喜欢杰夫的解决方案。 但也有一个专门用于此目的的实用函数。 这是一个例子:
Convert File Path( "$HOME", Windows );
它不仅仅可以将格式从 POSIX 更改为 Windows。 请参阅帮助 > 脚本索引 > 函数 > POSIX。
回复:JSL 识别当前运行脚本的路径JMP 和 JSL 不关心斜线的方向。 不管怎样,他们都会工作。
如果您需要在 JMP 之外使用路径字符串,您可以使用代入():
foo="c:/my directory/my directory/my directory";
substitute into(foo, "/", "\");
show(foo);
回复:JSL 识别当前运行脚本的路径该解决方案对我不起作用,生成的路径带有正斜杠 /,我需要它带有反斜杠 \。 有人知道解决方案吗?
回复:JSL 识别当前运行脚本的路径获取默认目录与查找 DEF 文件相结合听起来似乎可行,但似乎是一种令人不舒服的黑客行为。回报可能是值得的 - 我有一个用于所有文件路径定义的标准包含文件,但每个插件都有单独的修订版(即您描述的相同问题),因此能够动态发现父插件的 ID 将非常有用特征。如此之多,这个黑客开始听起来很有吸引力 - 没有想过阅读 DEF 文件......
回复:JSL 识别当前运行脚本的路径我通常使用“获取默认目录”函数或带有空字符串的“转换文件路径”函数来获取当前脚本的路径。
path1 = Get Default Directory();
path2 = Convert File Path( "" );
Show( path1, path2 );
这是我从“C:\Public”文件夹中的文件运行此脚本时的日志:
path1 = "/C:/Public/";
path2 = "/C:/Public/";
回复:JSL 识别当前运行脚本的路径如果我无法让 com.cmpny.dept.addin1 调用它,并且我不使用 pmroz 建议的常见加载项方法,那么知道该脚本所在的文件夹就足够了,因为我可以打开该加载项.def 从同一文件夹中提取并从那里提取 id。
这实际上给了我第二个潜在的应用。 如果我可以进入当前正在运行的加载项的 addin.def (但现在我似乎无法执行此操作),我可以通过从 addin.def 获取 id 和 addinVersion 进行版本检查,然后进行比较这是我可能使用 Internet Open 获得的最新插件版本的列表。 然后我可以找出用户的本地 addinVersion 是否是最新和最好的。
回复:JSL 识别当前运行脚本的路径是的,但我想在 General Functions.jsl 中包含一行,用于标识哪个其他加载项正在调用 General Functions.jsl 中的函数。
换句话说,在 com.cmpny.dept.addin1 中,脚本可能调用 General Functions.jsl 中的函数。 我想引用 General Functions.jsl 中的一个变量,该变量将显示 com.cmpny.dept.addin1 调用了它。
回复:JSL 识别当前运行脚本的路径为什么不将公共包含文件作为自己的插件。这样你就可以通过以下方式包含它:
// Load functions common to various apps
include("$ADDIN_HOME(com.cmpny.dept.common)\General Functions.jsl");