Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
' Скрипт оставляет в указанной папке не менее указанного числа свежих файлов с указанным расширением (если они есть)
' Если среди оставшихся файлов имеются старше указанного кол-ва дней, они удаляются

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. Просматриваю в массиве с датами файлов элементы более минимального количества
Старые файлы удаляю

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-01-2012 в 00:48.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:42, 04-01-2012 | #7