1

我必须实现一个功能,其中我有一个文件名,并且该名称最后包含一些整数值,我想将该整数值加一。更清楚地说,问题字符串“文件名”是:

asdfasdfasdfa.foo.old001

现在我必须检查这个文件名是否存在,如果存在,我必须将我的新文件命名为

asdfasdfasdfa.foo.old002

等等。我可以想到一种解决方案,即使用获取最后一个字符串“.old001”

文件扩展名字符串

命令,然后使用正则表达式获取最后三个字符并将“1”添加到它,然后将文件名加入这个新扩展名。但我不确定这是否是一个好的和最优的解决方案。任何其他想法或帮助都会很棒。谢谢。

4

1 回答 1

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"
于 2012-11-05T15:14:25.850 回答