Batch file 在tcl中传递和调用多个参数

Batch file 在tcl中传递和调用多个参数,batch-file,arguments,tcl,Batch File,Arguments,Tcl,我想制作一个可以接受N个参数的tcl过程。我想从bat文件中调用它。 这是我写的程序: proc multi_argu {args} { foreach {path rev_start rev_end} $args { puts "path-> $path" puts "rev_start-> $rev_start" puts "rev_end-> $rev_end" } } multi_argu $argv 现在我从我

我想制作一个可以接受N个参数的tcl过程。我想从bat文件中调用它。 这是我写的程序:

proc multi_argu {args} {
foreach {path rev_start rev_end} $args {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }
}
multi_argu $argv
现在我从我的bat文件中将其称为

tclsh multi_argu.tcl 1 2 3
但问题是

path-> 1 2 3
rev_start->
rev_end->
在我的tcl文件的末尾,我调用了multi_argu$argv,我认为这是罪魁祸首。但是,我不知道如何对多个参数执行此步骤。有人能提供任何输入吗?

因为$argv是一个列表,所以您要向proc传递一个列表变量,这意味着$args成为一个列表,包含一个列表元素

在tcl 8.5中,您可以对调用proc的方式进行一个小的更改:

multi_argu {*}$argv
将枚举列表中的项目,因此$args将成为项目列表

否则,我想您可以使用以下内容:

foreach {path rev_start rev_end} [lindex $args 0] { ... }
但是,这种类型违背了使用args作为proc参数的目的。在这种情况下,您也可以使用另一个变量名。

因为$argv是一个列表,所以您要将一个列表变量传递给proc,这意味着$args成为一个列表,包含一个列表元素

在tcl 8.5中,您可以对调用proc的方式进行一个小的更改:

multi_argu {*}$argv
将枚举列表中的项目,因此$args将成为项目列表

否则,我想您可以使用以下内容:

foreach {path rev_start rev_end} [lindex $args 0] { ... }

但是,这种类型违背了使用args作为proc参数的目的。在这种情况下,您也可以使用另一个变量名。

是否必须将multi_argu定义为一个proc?您的.bat文件可以调用multi_argu.tcl 其中包括:

puts "Calling $argv0 with $argc arguments: $argv..."

foreach {path rev_start rev_end} $argv {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }
现在当你从bat文件中调用它时

tclsh multi_argu.tcl 1 2 3
输出为:

Calling multi_argu.tcl with 3 arguments: 1 2 3...
path-> 1
rev_start-> 2
rev_end-> 3

您必须将multi_argu定义为一个proc吗?您的.bat文件可以调用multi_argu.tcl 其中包括:

puts "Calling $argv0 with $argc arguments: $argv..."

foreach {path rev_start rev_end} $argv {
        puts "path-> $path"
        puts "rev_start-> $rev_start"
        puts "rev_end-> $rev_end"
    }
现在当你从bat文件中调用它时

tclsh multi_argu.tcl 1 2 3
输出为:

Calling multi_argu.tcl with 3 arguments: 1 2 3...
path-> 1
rev_start-> 2
rev_end-> 3