从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":没有这样的文件或目录
如何将文件列表作为源参数正确传递给文件复制命令?
答案 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 {*}语法。