PDA

Показать полную графическую версию : [решено] батник, который удаляет файлы ранее определенной даты


foma24
16-01-2013, 13:58
Добрый день. Помогите написать батник - на сетевом диске есть файлы вида VideoSeq-dd.mm.gggg--time.avi нужно, чтобы на сетевом диске оставались файлы максимум с датой недельной давности, а остальные удалялись.

Iska
16-01-2013, 14:26
foma24, в каком формате у Вас «time»? Также приведите примеры имён реальных файлов.

foma24
16-01-2013, 15:00
формат time чч.мм.сс
примеры:
VideoSeq-01.09.2013--10.50.06.avi
VideoSeq-01.10.2013--15.50.11.avi
VideoSeq-01.10.2013--16.21.02.avi
VideoSeq-01.11.2013--11.20.11.avi

gora
18-01-2013, 15:35
@Echo Off
SetLocal EnableDelayedExpansion
:: путь в папке с файлами
Set folder=\\server\3 3
:: удаляем старее 7 дней
Set old=7
:: формат имен файлов
:: VideoSeq-mm.dd.gggg--time.avi
:: VideoSeq-12.31.2013--09.22.33.avi
:: ВАЖНО!
:: Разделители (- и .), их расположение в имени и положение даты в имени должны быть неизменны.
:: До первого тире перед датой не должно быть разделителей, а буквы могут быть любые и в любом количесте.

For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set tim=%%i
Set YYYY=%tim:~0,4%&Set MM=%tim:~4,2%&Set DD=%tim:~6,2%
Echo Now %DD% %MM% %YYYY%
Call :GetOldDate %old%
Echo Old %DD% %MM% %YYYY%
:: после проверки слово Echo удалить
For /F "tokens=* delims=" %%i In ('dir /S /A:-D /B "%folder%\*.avi" 2^>Nul') Do (
For /F "tokens=2,3,4 delims=-." %%a In ("%%~nxi") Do If %YYYY%%MM%%DD% GTR %%c%%a%%b Echo Del /F /Q "%%i"
)
Pause
Exit

:GetOldDate
Set MM=1%MM%&Set DD=1%DD%
Set /A MM-=100, DD-=100
Set /A DD-=%1
If %DD% GTR 0 GoTo formatMM_DD
Set /A MM=MM+11-((MM+10)/12)*12
If %MM%==12 Set /A YYYY-=1
For /F "Tokens=%MM%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set X=%%i
If %MM%==2 (
Set /A B1=YYYY%%4, B2=YYYY%%100, B3=YYYY%%400
If !B1!==0 If Not !B2!==0 Set /A X+=1
If !B3!==0 Set /A X+=1
)
Set /A DD=DD+X-((DD+X-1)/X)*X
:formatMM_DD
Set MM=0%MM%&Set DD=0%DD%
Set MM=%MM:~-2%&Set DD=%DD:~-2%
GoTo :EOF

foma24
18-01-2013, 16:08
Прошу прощения, ошибся формат даты не dd.mm.gggg а mm.dd.gggg Что нужно поменять в батнике ?

Iska
18-01-2013, 16:37
Прошу прощения, ошибся формат даты не dd.mm.gggg а mm.dd.gggg Что нужно поменять в батнике ? »
Вот тут и понимаешь, как рождаются предложения вида «Я в а@@е!»

gora
18-01-2013, 17:31
ошибся формат даты не dd.mm.gggg а mm.dd.gggg »
Скрипт изменен в соответствии с новой вводной.

foma24
21-01-2013, 09:50
все работает, огромное спасибо




© OSzone.net 2001-2012