腳本編寫:取得腳本本身的(絕對)路徑<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);