我对此很陌生,所以请以最简单的形式回答。
我正在尝试使用批处理文件设置进程。这个过程将调用一个正在寻找一些文件的 tcl,然后返回完成。看起来像:
批处理 --> 调用 tcl --> 返回批处理
在我的批处理文件中,我有:
设置我的路径=
C:\the path that files are in\
$MyPath$\MyTcl.tcl
中的 tcl
到这里为止一切正常。但是在 tcl 中有一些进程正在寻找相同路径 (MyPath) 中的文件,我不确定如何使用相同的变量(传递变量)。
有什么帮助吗?
非常感谢。
你必须让你的 Tcl 进程以某种方式知道那条路径。
这可以隐式或显式完成。
隐式执行此操作的方法是更改工作目录 进入那个“C:文件所在的路径”——生成的 Tcl 解释器 进程将继承它作为所谓的“当前工作目录”, 它可以在它运行的 Tcl 代码中查询 执行
[pwd]
命令
(或者只是使用相对路径引用文件,因为这样的路径
由操作系统解析为根目录在当前工作目录中
的过程。
明确的方法有很多;你可以:
“导出”批处理脚本中的变量并读回 在你的 Tcl 代码中——来自所谓的 “进程环境块”.
IIRC,Windows 上的批处理脚本导出通过
set
创建的所有变量
默认情况下,所以在你的 Tcl 脚本中你可以访问它
通过读取 ::env(MyPath)
变量的值。
这里是如何工作的。将其作为命令行参数传递给您的脚本。
为了做到这一点,你的脚本必须修改为实际 阅读它的命令行参数。
这是通过阅读
::argc
(命令行参数的数量)来完成的
和::argv
(这些参数的值)全局变量。
这里是如何工作的。存在更多复杂的方法将任何数据传递给子流程 (例如通过临时文件或通过进程的标准输入流) 但是对于这样一个简单的案例来说它们太复杂了,所以我们不去探索 现在这个方向。
set myPath [file dirname [info script]]
https://tcl.tk/man/tcl8.6/TclCmd/info.htm
https://tcl.tk/man/tcl8.6/TclCmd/file.htm