批处理文件:传递一个命令块而不是一个script.tcl

时间:2017-02-04 22:23:12

标签: batch-file tcl

我使用.bat文件运行.tcl脚本,如下面的简化示例所示:

script.tcl

set a "this is the script"
puts $a

script.bat

echo off
set tclpath="C:\tclsh.exe"
set filepath="C:\script.tcl"
%tclpath% %filepath%

我想知道我是否可以在.bat文件中包含.tcl脚本的命令,因此我只有一个.bat文件运行tclsh.exe并将命令传递给tcl shell,而不是拥有两个文件。 / p>

这可能吗?我该怎么办?

2 个答案:

答案 0 :(得分:1)

  

我想知道我是否可以在.bat文件中包含.tcl脚本的命令,所以我没有两个文件,只有一个.bat文件   运行tclsh.exe并将命令传递给tcl shell。

容易腻。 。

您可以在批处理脚本中使用CALL子例程,该命令会将命令附加到您使用buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 变量指定的动态创建的脚本文件中。

通过这种方式,您可以在批处理脚本中拥有所有内容,除了确保创建它的set filepath例程具有正确的语法等之外,您无需担心tcl脚本文件。

您实际上是使用批处理ECHO命令构建tcl脚本逻辑,并且每次运行都会创建它。

使用带有特殊字符的警告,因为如果批量解释那些或其他人,则可能需要对{t}脚本的escape某个字符使用克拉:tclshScript符号注意一个问题。

^

更多资源

答案 1 :(得分:1)

对于很多事情,Tcler的Wiki上有一些页面可以查找有趣的内容。特别是,this old page有一些非常有用的技巧。在您阅读时,您将看到尝试过的技术历史。它们取决于Tcl命令通常可以以::为前缀(在批处理文件语言中将它们标记为奇怪的标签)这一事实,您可以使用if 0在Tcl中注释掉代码块(使用Tcl)不解析内容,除了确保它是支撑平衡的,通常是哪个代码)。

最好的技巧是不仅使代码多语言,而且也使其易于阅读。保持可读性是不要发疯的关键。

::if 0 {
@rem This code in here is pure batch script

echo off
set tclpath="C:\tclsh.exe"
%tclpath% "%~f0" %*

@rem Put this at the end; it means terminate since the “eof” label is end-of-file
@goto eof
}

# This code is the pure Tcl code

set a "this is the script"
puts $a

要注意的其他比特:

  • "%~f0" - 这会将完整路径转换为“第零个参数”,这是您正在运行的脚本的名称。
  • %* - 这是剩下的所有论点。传递它们是个好主意,您可以使用全局argv变量中的列表从Tcl访问它们。