Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   VBS удаление файлов в папке по определенному имени и дате старше n (http://forum.oszone.net/showthread.php?t=333932)

Vooodi4356 23-03-2018 19:01 2805077

VBS удаление файлов в папке по определенному имени и дате старше n
 
Всем доброго времени суток.
Прошу оказать помощь в написании скрипта на VBS. Сам в VBS к сожалению полный 0. Нужно очистить папку с файлами старых логов.
Сами файлы с расширением .txt и .log и они должны удаляться старше определенной даты.

Пример файлов:
Log_01.02.2017.log удаление старше 15.03.2018
Print_[12052013].txt удаление старше 01.01.2016

megaloman 23-03-2018 22:15 2805108

Код:

Call DelOldFile("Z:\Box_In", "^log.*\.log$", "15.03.2018")
Call DelOldFile("Z:\Box_In", "^print_\[.*\.txt$", "01.01.2016")

' ---------------------------------------------------------------------------
Sub DelOldFile(inDir, Msk, sDt)
    dDt = DateValue(sDt)
   
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folds = FSO.GetFolder(inDir)
    Set Files = Folds.Files

    Set RegMaska = New RegExp
    RegMaska.Pattern = Msk
    RegMaska.IgnoreCase = True
       
    For Each jf In Files
      If RegMaska.Test(jf.Name) Then
'            If jf.DateCreated < dDt Then
            If jf.DateLastModified < dDt Then
                F = FSO.DeleteFile(jf.Path, True)
            End If
      End If
    Next
End Sub


Vooodi4356 25-03-2018 11:00 2805311

megaloman, Добрый день. Спасибо за ответ. Сам скрипт проверил, но результат он не выдает, а файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю?

megaloman 25-03-2018 12:40 2805332

Цитата:

Цитата Vooodi4356
файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю »

Подозревал, что так и будет. Надеюсь, путь Вы указали свой вместо моего "Z:\Box_In", и правильно. Но загвоздка в другом: я подозреваю, что Вы тестировали скрипт на какой-то тестовой папке, куда скопировали файлы. И тут начинается коллизия: скрипт анализирует дату создания файла If jf.DateCreated. В скопированных сегодня файлах дата создания - сегодняшняя.
В этом можно убедиться, проделав в командном окне команду
dir Z:\Box_In\*.txt /O:D /T:С
Возможно анализировать не дату создания, а дату последней модификации. Эти даты можно увидеть командой
dir Z:\Box_In\*.txt /O:D /T:W
В предыдущем посте я изменил строку.
Код:

            If jf.DateLastModified < dDt Then

megaloman 25-03-2018 13:55 2805348

Vooodi4356,
Как вариант, ИМХО, проще в использовании CMD
Предполагаю, что дата в системе отображается как дд.мм.гггг
Код:

@Echo Off

Call :DelOldFile "Z:\Soft_In\log_*.log" "15.03.2018"
Call :DelOldFile "Z:\Soft_In\print_[*].txt" "01.01.2016"
GoTo :Eof

:DelOldFile
        Set "DateSave=%~2"
        Set /A DateSave=%DateSave:~6,4%%DateSave:~3,2%%DateSave:~0,2%
        Pushd "%~dp1"
        FOR /F "usebackq delims=" %%f IN (`2^>nul Dir %1 /b /A:-D /O:D /T:W`) DO Call :DelDate "%~dp1%%f" "%%~tf" %DateSave%
        Popd
GoTo :Eof

:DelDate
        Set "DateFile=%~2"
        Set /A DateFile=%DateFile:~6,4%%DateFile:~3,2%%DateFile:~0,2%
        If %DateFile% LSS %3 Del %1
GoTo :Eof


Vooodi4356 25-03-2018 14:02 2805351

Путь я сразу поменял на тот который требовался.
Проверил скрипт еще раз с измененной вами командой - If jf.DateLastModified < dDt Then
Скрипт работает и при смене дат, удаление происходит нормально.

Больше спасибо за оказанную помощь. Буду учить мат часть.

С cmd тоже попробую


Время: 22:37.

Время: 22:37.
© OSzone.net 2001-