Показать полную графическую версию : VBS удаление файлов в папке по определенному имени и дате старше n
Vooodi4356
23-03-2018, 19:01
Всем доброго времени суток.
Прошу оказать помощь в написании скрипта на 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
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
megaloman, Добрый день. Спасибо за ответ. Сам скрипт проверил, но результат он не выдает, а файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю?
megaloman
25-03-2018, 12:40
файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю » Подозревал, что так и будет. Надеюсь, путь Вы указали свой вместо моего "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
Vooodi4356, Предполагаю, что дата в системе отображается как дд.мм.гггг@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
Путь я сразу поменял на тот который требовался.
Проверил скрипт еще раз с измененной вами командой - If jf.DateLastModified < dDt Then
Скрипт работает и при смене дат, удаление происходит нормально.
Больше спасибо за оказанную помощь. Буду учить мат часть.
С cmd тоже попробую
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.