Одним из способов решения вашей проблемы является создание словаря, который сопоставляет базовые имена файлов с наибольшим номером ревизии:
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare
For Each f In fso.GetFolder(sourcefolder)
basename = fso.GetBaseName(f.Name)
a = Split(basename, "_")
revision = Int(a(UBound(a)))
prefix = a(0)
if d(prefix) < revision Then
d(prefix) = revision
End If
Next
Затем выполните второй цикл, чтобы удалить все файлы, базовое имя которых не имеет этой ревизии:
For Each f In fso.GetFolder(sourcefolder)
basename = fso.GetBaseName(f.Name)
a = Split(basename, "_")
revision = Int(a(UBound(a)))
prefix = a(0)
If d.Exists(prefix) And revision < d(prefix) Then
f.Delete
End If
Next
Обратите внимание, что в этом коде предполагается, что префикс и ревизия, разделяющие подчеркивание, являются единственными в базовом имени. Если у вас есть имена файлов, содержащие более одного подчеркивания (например, foo_bar_1.txt
), вам нужно настроить извлечение префикса и ревизии, чтобы позаботиться об этом.
С учетом вышесказанного я настоятельно рекомендую не выполнять управление ревизиями в именах файлов. Используйте систему контроля версий (Git, Mercurial, Subversion, ...). Вот для чего они были изобретены.