<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一個包含 365 個 .csv 檔案的資料夾。 我想將每個 .csv 檔案轉換為 .jmp 檔案並刪除 .jmp 檔案中的一些列,然後使用 .csv 檔案的名稱儲存 .jmp 檔案並退出 JMP。 所有這些都必須透過 JSL 腳本自動完成。
我已經有一個批次腳本,它啟動 JSL 腳本並將一個 .csv 檔案傳遞給 JSL 腳本。 然後,JSL 腳本打開 .csv 檔案並刪除我要刪除的列。
我在儲存 .jmp 檔案並使用 JSL 腳本退出 JMP 以便批次腳本從下一個 .csv 檔案開始使用 JSL 腳本開啟時遇到問題。
.jmp 檔案不會儲存,因此 JMP 不會退出,因此我的整個批次過程會停止,因為我的批次腳本等待 JMP 關閉。
我根據本討論底部用戶「twaintwist」的回應打開 .csv 檔案:將參數傳遞給 JSL 腳本
我所有的 .csv 檔案 + 批次腳本 + .jsl 腳本都在同一個資料夾中。
這個解決方案對我來說效果很好,所以這是我的批次腳本:
對於 (*.csv) 中的 %%f 執行 (
echo 檔名 = "%%~nf.csv";>file.txt
複製 /y /b file.txt+myScript.jsl temp.jsl
JMP 溫度.jsl
超時/t 5
刪除 %%~nf.csv
超時/t 5
刪除檔案.txt
超時/t 5
德爾溫度.jsl
)
暫停
然後,我的 JSL 腳本打開 .bat 腳本移交的 .csv 文件,並刪除一些列。 但是刪除這些列後,我的 JSL 腳本似乎停止了。
.jmp 檔案將不會儲存,且 JMP 不會退出。 正如您在腳本中看到的,我嘗試了不同的方法來使用 JSL 儲存和關閉視窗。
這是我的 JSL 腳本:
doc = 開啟(檔名);
dt = 當前資料表();
// 關閉顯示更新以允許快速更新資料表。
dt << 開始資料更新;
列列表 = {
//#要刪除的列#
};
dt << 刪除欄位(ColList);
dt << 結束資料更新;
名稱長度 = 長度(檔案名稱);
fielName = Left(檔名, nameLength - 3);
名稱 = 檔名 || “jmp”;
dt<
doc<
等待(10);
關閉(dt,nosave);
關閉(文檔,不儲存);
//doc << 關閉視窗;
//dt<<關閉視窗();
//關閉全部(資料表, save(fileName+"jmp"));
退出(不保存);
退出(不保存);
您可以像調度 .bat 檔案一樣調度 JSL 腳本。
添加“//!”到腳本的第一行或將 .jsl 更改為 .rpt,它將在開啟時自動執行。然後讓您的 Windows 排程器指向 JMP 腳本而不是批次檔。
只是說。
不幸的是,這個進程屬於一個更大的系統,我需要能夠使用 Windows 調度程序來調度它,所以無論如何我都需要 .BAT,但感謝您提醒我它只能在 JSL 中完成;)
太棒了,很高興你成功了。
您也可以在 JSL 中完成所有這些操作,而無需 .BAT 檔案。這可能(也可能不會)簡化您的整個流程。JSL 具有 FilesInDirectory 函數和強大的字串操作函數,可以建立和驗證檔案名稱。如果您目前的解決方案因等待和逾時以及重複啟動/停止 JMP 而速度太慢,您可能需要刪除 .BAT 檔案。
非常感謝! 你的解決方案解決了我的問題...
作為 JSL 的初學者,我不知道有像日誌這樣的東西。
當我檢查日誌時,我注意到我的刪除列函數沒有像我想像的那樣正常工作,因為我輸錯了其中一個列名,因此該函數停止了。
儘管如此,關閉 dt 和 doc 也是錯誤的,但最終這並不是什麼大問題。
再次感謝您的幫忙!
檢查 JSL 日誌中的消息。關閉 dt 和 doc 可能是一個問題;他們是同一張桌子嗎?