1

ファイル名があり、その名前の最後に整数値が含まれている機能を実装する必要があり、その整数値を1つインクリメントしたいと思います。より明確にするために、問題の文字列"filename"は次のとおりです。

asdfasdfasdfa.foo.old001

ここで、このファイル名が存在するかどうかを確認する必要があります。存在する場合は、新しいファイルに次の名前を付ける必要があります。

asdfasdfasdfa.foo.old002

等々。最後の文字列「.old001」を使用して取得するという1つの解決策を考えることができます

ファイル拡張子文字列

コマンドを実行し、正規表現を使用して最後の3文字を取得し、それに「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 に答える