如何通过传递命令行参数从批处理/作业文件运行一个TCL脚本?

时间:2014-06-09 18:49:55

标签: batch-file tcl

我在tcl中为我正在处理的项目编写脚本。

我想尽可能地自动化事物,并且希望尽可能不触及脚本的源代码。我想从.bat或.job文件中运行主脚本文件,我传递命令以执行脚本和参数。

我在stackoverflow上提到过这篇文章:

How to run tcl script in other tcl script?

并且做了几乎相同的事情。但是,由于我的脚本是裸代码而不是单个巨大的proc,我没有“args”参数来读取我想传递的参数。

例如,如果script1.tcl是包含裸代码的主文件,我想要一个文件script2.job或script2.bat这样,

<command-to-run-script1.tcl> <mandatory-args> <optional-args> 

是文件的内容。

关于如何实现相同的任何建议?

1 个答案:

答案 0 :(得分:2)

要运行Tcl脚本,传入一些参数,请执行:

tclsh script1.tcl theFirstArgument theSecondArgument ...

它在Windows上的CMD脚本/ BAT文件以及所有Unix上的shell脚本中的工作原理。您可能也希望在某些参数周围加上引号,但这只是带参数的程序的绝对正常运行。 (tclsh可能需要tclsh8.5tclsh85或者......好吧,这取决于它的安装方式。script1.tcl可能需要一个完整的路径到脚本。)

在脚本中,参数(从theFirstArgument开始)将出现在全局argv变量的Tcl列表中。请注意,这是 not args,这是程序的一项功能。有很多方法可以解析参数列表,但是在调用期间提供的任何引用都应该已被剥离。

这是一个非常简单的版本:

foreach argument $argv {
    puts "Oh, I seem to have a >>$argument<<"
}

你可能需要更精细的东西!虽然有很多可能性,但一定要确切地获得更多关注的想法。


如果您从另一个Tcl脚本调用Tcl,则需要使用exec来执行此操作。另一方面,您可以通过其他方式让自己更容易:

exec [info nameofexecutable] script1.tcl theFirstArgument theSecondArgument ...

info nameofexecutable命令返回Tcl解释程序的名称(通常为tclsh8.5wish86或......)