Войти

Показать полную графическую версию : [решено] Удаление из заданной папки старых 7z-архивов


ApxapoBeu
18-09-2012, 19:27
Здравствуйте. Прошу знающих людей проверить мой скрипт. Он работает и выполняет то, что от него требуется, но перед тем, как отправить его в планировщик, хотелось бы убедиться, что он безопасен.
Скрипт должен удалять из заданной папки .7z архивы, которые старше %delta% месяцев (принимать значение больше 12 дельта точно не будет), и доложить об удалении в лог.

@Echo off

SetLocal EnableDelayedExpansion

SET PATH_LOG=C:\Archive\LOG\
SET LOG_FILE=Event.log
Set del7z=c:\archive\*.7z
set delta=2
set yyyy=%date:~6,4%
Set /A MM=1%Date:~3,2%-%Delta%-100
if %mm% lss 1 (
set /a mm=12+%mm%
set /a yyyy=%yyyy%-1
)
set dd=%date:~0,2%
if %dd% gtr 29 set dd=29
if %mm% lss 10 (
set yyyymmdd=%yyyy%0%mm%%dd%
) else (
set yyyymmdd=%yyyy%%mm%%dd%
)
echo %yyyymmdd%

for %%i in (%del7z%) do (
set $t=%%~ti& set $d=!$t:~6,4!!$t:~3,2!!$t:~,2!
if !$d! LSS %yyyymmdd% (
DEL /F "%%i"
echo %DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2% - %TIME:~0,-3% - %%~ni.7z - Удален - OK >>"%PATH_LOG%%LOG_FILE%"
)
)

firstarey
19-09-2012, 13:00
можно обойтись сделующим:

forfiles /P c:\archive\ /M *.7z /S /D -31 /C "cmd /c echo Deleted: @PATH >> %DIR_log%erase.log & del @FILE"

где:

синим выделено

/D <дата>
Выбор файлов, у которых дата последнего изменения больше или равна (+) либо меньше или равна (-) указанной дате при использовании формата "dd.MM.yyyy"; либо файлов, у которых дата последнего изменения больше или равна (+) текущей дате плюс "dd" дней либо меньше или равна (-) текущей дате минус "dd" дней. Допустимым числом дней "dd" является любое число в диапазоне 0 - 32768. "+" используется по умолчанию, если знак не указан

ApxapoBeu
19-09-2012, 17:03
2 firstarey
Спасибо за ответ, но скрипт будет запускаться на хр, в которой нет forfiles. наверное можно запилить forfiles и для хр, но я решил пойти другим путем

ApxapoBeu
08-10-2012, 10:34
Скрипт в планировщике 3 недели. пока все ок




© OSzone.net 2001-2012