如何使用Tcl文件命令复制多个文件

时间:2014-11-10 15:00:25

标签: tcl

从Tcl在线手册中我看到Tcl的文件复制命令可以将多个源文件作为参数:

file copy ?-force? ?--? source ?source ...? targetDir

但是,我有以下代码:

set flist [list a.txt b.txt]
file copy $flist [file join D:\\ test dest]

并收到此错误消息:     错误复制" a.txt b.txt":没有这样的文件或目录

如何将文件列表作为源参数正确传递给文件复制命令?

3 个答案:

答案 0 :(得分:2)

正确的方法是使用扩展:

file copy {*}$flist {D:\test\dest}

{*}将后面给出的列表中的单词替换为单独的单词;它就在这里。

我还将目标目录编写为括号引用的文字。


仍然在Tcl 8.4或之前?升级!或者使用它:

eval file copy $flist [list {D:\test\dest}]

使用eval{*}更难,所以真的升级。

甚至可以:

foreach f $flist {
    file copy $f {D:\test\dest}
}

鉴于IO操作将主导性能,你不应该注意到以这种方式做任何速度差异。

答案 1 :(得分:0)

问题是列表作为一个整体传递给命令而不是单个元素。使用{*}运算符将列表分解为各个元素。

答案 2 :(得分:-1)

简短的回答是不要按照你的方式使用列表。 这适用于您的示例:

set flist "a.txt b.txt"
file copy $flist [file join D:\\ test dest]

更正确的方法是使用list expansion {*}语法。