脚本编写:获取脚本本身的(绝对)路径<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 用户您好,
我正在编写一个脚本,该脚本使用多个应位于同一目录中的文件,例如脚本文件。 目前我正在使用“获取当前目录”命令访问这些文件。 遗憾的是,只有当用户通过双击资源管理器中的脚本打开 JMP 实例时,这才起作用。
如果 JMP 已在运行并且用户通过 File -> Open -> ... 打开脚本。 当前目录是 JMP 安装的路径,而不是脚本文件的路径。
有没有办法获取脚本文件的路径来解决这个问题?
谢谢,
塞巴斯蒂安
回复:脚本编写:获取脚本本身的(绝对)路径不确定这个函数已经存在多久了,因为我对 JMP 相当陌生,我自己在尝试解决类似问题时发现了这个函数,但似乎函数“Include File List()”返回一个列表打开正在执行脚本的上下文中的文件。 (顺便说一句,这个函数的描述只是提供一些信息,就像脚本索引或在线资源中的大多数函数/方法/消息的情况一样。)
看来,如果此函数在脚本打开其他任何内容之前在脚本顶部运行,则可以从中提取脚本文件路径和脚本文件名,因为这是此时返回的唯一路径。
当我使用 JMP 中打开的其他文件对其进行测试,并通过从 Windows 资源管理器中双击脚本来运行脚本时(通过在脚本顶部包含“//!”,将脚本设置为在打开时运行,而不打开脚本编辑器窗口) ),我只得到返回的脚本的路径。 其他打开的文件均不会返回。
回复:脚本编写:获取脚本本身的(绝对)路径有了一个考虑不周的正则表达式......也许它已经足够好了......
txt = runprogram(executable("net"), options({"use"}), readfunction("text"));
show(regex(txt,"U:[ \t]*([^ \t]*)","\1")); // find the "U:" drive
txt 值看起来像这样,在正则表达式之前
"New connections will be remembered.
Status Local Remote Network
-------------------------------------------------------------------------------
U: \\network\root\u\chales Microsoft Windows Network
The command completed successfully.
"
正则表达式捕获了这个
Regex(txt, "U:[ \t]*([^ \t]*)", "\1") = "\\network\root\u\chales";
正则表达式的第二个参数是模式,这意味着
找到 U:,后跟零个或多个空格或制表符,然后是零个或多个非空格或制表符的字符。 最后一位位于括号中,它形成捕获组 \1,这也是指定正则表达式结果的第三个参数。
回复:脚本编写:获取脚本本身的(绝对)路径
@pmroz写道:
这可能会做你想做的事:
获取默认目录()
我通常会去掉第一个字符,因为它是正斜杠,例如“/M:/myapplication/bigdata/”
app_path = Substr(获取默认目录(), 2, 999);
此解决方案在以下情况下会失败:如果您的脚本或应用程序是通过 HTML 文档的超链接启动的,则 Get Default Directory() 可能会返回由 Web 浏览器创建的临时文件夹。
回复:脚本编写:获取脚本本身的(绝对)路径谢谢汤姆。好主意啊!
现在我只希望“net use”是一个Windows环境变量,那么我只需使用类似的东西:获取环境变量(“NETUSE”)(当然这不起作用)。DJ
回复:脚本编写:获取脚本本身的(绝对)路径在常规 SAS 中,我刚刚解析了 Windows (DOS) 命令“net use”的输出,以查找映射到特定驱动器号的卷。
回复:脚本编写:获取脚本本身的(绝对)路径Get Default Directory () 效果很好......除非用户映射网络驱动器(例如 X:\mynetworkpath\test.jsl)。然后您将获得截断的路径而不是完整路径(例如\\yournetwork.jmp.com\blahblah\mynetworkpath\test.jsl)。
如果有人知道解决这个问题的方法,这是一种即使映射也能实际读取完整路径的方法,请告诉我!谢谢..dj
回复:脚本编写:获取脚本本身的(绝对)路径就是这样!
感谢您!
回复:脚本编写:获取脚本本身的(绝对)路径这可能会做你想做的事:
获取默认目录()
我通常会去掉第一个字符,因为它是正斜杠,例如“/M:/myapplication/bigdata/”
app_path = Substr(获取默认目录(), 2, 999);