VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Ответить
Аватара пользователя
Vooodi4356

VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Сообщение Vooodi4356 »

Всем доброго времени суток.

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

Сами файлы с расширением .txt и .log и они должны удаляться старше определенной даты.



Пример файлов:

Log_01.02.2017.log удаление старше 15.03.2018

Print_[12052013].txt удаление старше 01.01.2016
Аватара пользователя
megaloman

Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Сообщение megaloman »

Код:

Код: Выделить всё

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

Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Сообщение Vooodi4356 »

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

Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Сообщение Vooodi4356 »

Цитата Vooodi4356:



файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю
VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n




Подозревал, что так и будет. Надеюсь, путь Вы указали свой вместо моего "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

Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Сообщение megaloman »

Vooodi4356,


Как вариант, ИМХО, проще в использовании CMD

[spoiler]Предполагаю, что дата в системе отображается как дд.мм.гггг

Код:
[/spoiler]

Код: Выделить всё

@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

Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n

Сообщение Vooodi4356 »

Путь я сразу поменял на тот который требовался.

Проверил скрипт еще раз с измененной вами командой - If jf.DateLastModified < dDt Then

Скрипт работает и при смене дат, удаление происходит нормально.



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



С cmd тоже попробую
Ответить

Вернуться в «Скриптовые языки администрирования Windows»