2

我在“文件复制”tcl 命令中有一个查询。我尝试将所有文​​件存储到一个列表中并在我的命令中使用它。但 tcl 无法识别这些文件。

例如:

    Files are abc.log , foo.log , bar.log

如果将这些文件附加到列表中,请说 list_file 并且如果我在命令中替换 list_file

    lappend list_file abc.log foo.log bar.log
    file mkdir ../../abc
    file copy -- $list_file ../../abc

我收到一条错误消息“错误复制,没有文件或目录”。如果我通过直接指定文件名(而不是列表)来尝试相同的操作,它会起作用。请指导我

4

2 回答 2

3

要详细说明@evil-otto 的答案...

{*}仅从 Tcl 8.5 开始可用;对于早期版本,eval可以使用一个或多个调用。

使用以下命令构造命令eval

set cmd [list file copy --]
lappend cmd abc.log foo.log bar.log ../../abc
eval $cmd

(阅读本文以了解为什么在创建要使用的命令时必须使用列表eval。)

多次调用(不费吹灰之力):

foreach fname $list_file {
    file copy -- $fname ../../abc
}
于 2012-12-18T19:25:25.773 回答
1

传递给的列表file copy必须展开。

file copy -- {*}$list_file ../../abc
于 2012-12-18T18:43:54.660 回答