Всем доброго времени суток.
Прошу оказать помощь в написании скрипта на VBS. Сам в VBS к сожалению полный 0. Нужно очистить папку с файлами старых логов.
Сами файлы с расширением .txt и .log и они должны удаляться старше определенной даты.
Пример файлов:
Log_01.02.2017.log удаление старше 15.03.2018
Print_[12052013].txt удаление старше 01.01.2016
VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n
-
megaloman
Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n
Код:
Код: Выделить всё
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
megaloman, Добрый день. Спасибо за ответ. Сам скрипт проверил, но результат он не выдает, а файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю?
-
Vooodi4356
Re: VBS/WSH/JS - VBS удаление файлов в папке по определенному имени и дате старше n
Цитата Vooodi4356:
файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю
Подозревал, что так и будет. Надеюсь, путь Вы указали свой вместо моего "Z:\Box_In", и правильно. Но загвоздка в другом: я подозреваю, что Вы тестировали скрипт на какой-то тестовой папке, куда скопировали файлы. И тут начинается коллизия: скрипт анализирует дату создания файла If jf.DateCreated. В скопированных сегодня файлах дата создания - сегодняшняя.
В этом можно убедиться, проделав в командном окне команду
dir Z:\Box_In\*.txt /O:D /T:С
Возможно анализировать не дату создания, а дату последней модификации. Эти даты можно увидеть командой
dir Z:\Box_In\*.txt /O:D /T:W
В предыдущем посте я изменил строку.
Код:
файлы как были так и остались и процесс удаление видимо не срабатывает. Хотя может я сам что то не правильно делаю
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
Vooodi4356,
Как вариант, ИМХО, проще в использовании CMD
[spoiler]Предполагаю, что дата в системе отображается как дд.мм.гггг
Код: [/spoiler]
Как вариант, ИМХО, проще в использовании 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
Путь я сразу поменял на тот который требовался.
Проверил скрипт еще раз с измененной вами командой - If jf.DateLastModified < dDt Then
Скрипт работает и при смене дат, удаление происходит нормально.
Больше спасибо за оказанную помощь. Буду учить мат часть.
С cmd тоже попробую
Проверил скрипт еще раз с измененной вами командой - If jf.DateLastModified < dDt Then
Скрипт работает и при смене дат, удаление происходит нормально.
Больше спасибо за оказанную помощь. Буду учить мат часть.
С cmd тоже попробую