在tcl中复制文件名(带通配符)

在tcl中复制文件名(带通配符),tcl,xilinx,vivado,Tcl,Xilinx,Vivado,我正在尝试使用通配符复制文件,但该文件的解释不正确 set projName [lindex $argv 0] puts "$projName chosen" set sysdefPath "$projName/$projName.runs/impl_1/*.sysdef" file copy -force $sysdefPath ./src/generatedFiles/$projName.hdf 我已经尝试过这种方法的几个变体,但是没有一个能起作用{*}、(*)、[*]、{*}。其结果是

我正在尝试使用通配符复制文件,但该文件的解释不正确

set projName [lindex $argv 0]
puts "$projName chosen"

set sysdefPath "$projName/$projName.runs/impl_1/*.sysdef"
file copy -force $sysdefPath ./src/generatedFiles/$projName.hdf
我已经尝试过这种方法的几个变体,但是没有一个能起作用{*}、(*)、[*]、{*}。其结果是将通配符(*)放置在搜索路径中,而不是尝试进行模式匹配

执行此操作的正确方法是什么

产出

$ test.tcl -tclargs proj
# set projName [lindex $argv 0]
# puts "$projName chosen"
proj chosen
# set sysdefPath "$projName/$projName.runs/impl_1/*.sysdef"
# file copy -force $sysdefPath ./src/generatedFiles/$projName.hdf
error copying "proj/proj.runs/impl_1/*.sysdef": no such file or directory
    while executing
"file copy -force $sysdefPath ./src/generatedFiles/$projName.hdf"
    (file "./src/projTcls/build_bitstream.tcl" line 5)

shell将在找到文件模式的任何地方展开它们。Tcl不是这样的:您必须使用命令:untested显式地请求与模式匹配的文件列表

设置模式$projName/$projName.runs/impl_1/*.sysdef
设置sysdefPaths[glob-nocomplain--$pattern]
开关-精确[llength$sysdefPaths]{
0{错误“没有与$pattern匹配的文件”}
1{file copy-force[lindex$sysdefPaths 0]./src/generatedFiles/$projName.hdf}
默认{错误“多个文件匹配$pattern:[列表$sysdefPaths]”}
}

您的shell将在找到文件模式的任何地方展开它们。Tcl不是这样的:您必须使用命令:untested显式地请求与模式匹配的文件列表

设置模式$projName/$projName.runs/impl_1/*.sysdef
设置sysdefPaths[glob-nocomplain--$pattern]
开关-精确[llength$sysdefPaths]{
0{错误“没有与$pattern匹配的文件”}
1{file copy-force[lindex$sysdefPaths 0]./src/generatedFiles/$projName.hdf}
默认{错误“多个文件匹配$pattern:[列表$sysdefPaths]”}
}

除非在glob命令中添加-nocomplain标志,否则永远不会到达交换机的0分支。除非在glob命令中添加-nocomplain标志,否则永远不会到达交换机的0分支。