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");