Код:

' Скрипт оставляет в указанной папке не менее указанного числа свежих файлов с указанным расширением (если они есть)
' Если среди оставшихся файлов имеются старше указанного кол-ва дней, они удаляются
fPath = "E:\DelShare" ' Полное имя рабочего каталога (без слэжа \ на конце)
fExt = "bat" ' Расширение файлов
nMin = 10 ' Минимальное число оставляемых файлов
nOld = 7 ' Старше кол-ва дней файлы удаляем
OldDate = DateAdd("d", -nOld, Date)
' MsgBox CStr(OldDate)
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folds = FSO.GetFolder(fPath)
Set Files = Folds.Files
N = Files.Count - 1
' MsgBox CStr(N)
If N < 0 Then
MsgBox "В папке" + vbCrLf + fPath + vbCrLf + "файлы не найдены"
Else
ReDim nFiles(N), dFiles(N)
NN = -1
For Each jf In Files
nFiles(NN + 1) = jf.Name
If LCase(FSO.GetExtensionName(fPath + "\" + nFiles(NN + 1))) = LCase(fExt) Then
NN = NN + 1
dFiles(NN) = jf.DateLastModified
End If
Next
If NN < 0 Then
MsgBox "В папке" + vbCrLf + fPath + vbCrLf + "файлы c расширением " + fExt + vbCrLf + " не найдены"
Else
For i = 0 To NN
For j = i To NN
If dFiles(i) < dFiles(j) Then
df = dFiles(i)
dFiles(i) = dFiles(j)
dFiles(j) = df
nf = nFiles(i)
nFiles(i) = nFiles(j)
nFiles(j) = nf
End If
Next
' MsgBox CStr(dFiles(i)) + " " + nFiles(i)
Next
If NN > nMin - 1 Then
For i = nMin To NN
' MsgBox CStr(dFiles(i)) + " " + nFiles(i)
If dFiles(i) < OldDate Then Call FSO.DeleteFile(fPath + "\" + nFiles(i), True)
Next
End If
End If
End If
Длинновато.
1. Записываю имена и даты изменения файлов в массивы
2. Сортирую по датам по убыванию
3. Просматриваю в массиве с датами файлов элементы более минимального количества
Старые файлы удаляю