目录中的文件很少,如as1.1.log,df1.1.txt,gh1.1.bin等。文件之间唯一常见的是版本1.1。是否有可能将文件列表添加到TCL列表中,并检查目录中是否存在该列表内容。
如果文件名称为as50.1.1.log,as55.1.1.log,其中50和55是两位数的型号,那么文件列表可以这样制作吗? 设置版本" 1.1" set fileList {as ??。$ version.log,df $ version.txt,gh $ version.bin}
上述形成列表的方式似乎不起作用。有什么建议吗?
提前致谢。 -Ashwhin。
答案 0 :(得分:0)
set files [glob -directory "yourDirectoryName" *] ;#returns all names of files in the folder
答案 1 :(得分:0)
要检查 all 是否存在列表中指定的文件,请使用一个小帮助程序(因为帮助程序使事情更加清晰):
proc allPresent {fileList} {
foreach f $fileList {
if {![file exists $f]} {
return false
}
}
return true
}
set files {as1.1.log df1.1.txt gh1.1.bin}
if {[allPresent $files]} {
puts "Everything here"
} else {
puts "Something absent"
# Returning a boolean does mean that you don't know *which* is absent...
}
无论如何,这些文件名可能应该是完全合格的。 (这是一个很好的做法,因为这意味着你的代码并非如此依赖于pwd
的价值。)如果它们不是,你就可以在{{{{{{{{{ 3}},如本改编版所示......
# Note! Optional second argument
proc allPresent {fileList {directory .}} {
foreach f $fileList {
if {![file exists [file join $directory $f]]} {
return false
}
}
return true
}
if {[allPresent $files that/directory]} {
...
另一种方法是file join
获取所有文件名,然后对其进行检查:
proc allPresent {fileList {directory .}} {
# Glob pattern might be better as *1.1*
set present [glob -nocomplain -directory $directory -tails *]
foreach f $fileList {
if {$f ni $present} {
return false
}
}
return true
}
但这在实践中并没有那么高效。不妨尽可能清楚地写出来!