<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 可能是一个问题;他们是同一张桌子吗?