我必须实现一个功能,其中我有一个文件名,并且该名称最后包含一些整数值,我想将该整数值递增一。更清楚的是,问题字符串“filename”是:
asdfasdfasdfa.foo.old001
现在我必须检查这个文件名是否存在,如果是,我必须将我的新文件命名为
asdfasdfasdfa.foo.old002
等等。我可以想到一个解决方案,即使用
获取最后一个字符串“.old001”文件扩展名字符串
命令然后使用正则表达式获取最后三个字符并向其添加“1”,然后将文件名加入此新扩展名。但我不确定它是否是一个好的和最佳的解决方案。任何其他想法或帮助都会很棒。谢谢。
答案 0 :(得分:4)
proc incr_filename {name} {
set digits [regexp -inline {\d+$} $name]
set prefix [string range $name 0 end-[string length $digits]]
set num [scan $digits %d] ;# prevents problems with invalid octal numbers
format "%s%0*d" $prefix [string length $digits] [incr num]
}
puts [incr_filename asdfasdfasdfa.foo.old001]
找到不存在的文件名:
set filename abcd.ext.old001
while {[file exists $filename]} {
set filename [incr_filename $filename]
}
puts "new filename is $filename"