Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] батник, который удаляет файлы ранее определенной даты (http://forum.oszone.net/showthread.php?t=251577)

foma24 16-01-2013 13:58 2068041

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

Iska 16-01-2013 14:26 2068071

foma24, в каком формате у Вас «time»? Также приведите примеры имён реальных файлов.

foma24 16-01-2013 15:00 2068096

формат 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 2069616

Код:

@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 2069646

Прошу прощения, ошибся формат даты не dd.mm.gggg а mm.dd.gggg Что нужно поменять в батнике ?

Iska 18-01-2013 16:37 2069662

Цитата:

Цитата foma24
Прошу прощения, ошибся формат даты не dd.mm.gggg а mm.dd.gggg Что нужно поменять в батнике ? »

Вот тут и понимаешь, как рождаются предложения вида «Я в а@@е!»

gora 18-01-2013 17:31 2069717

Цитата:

Цитата foma24
ошибся формат даты не dd.mm.gggg а mm.dd.gggg »

Скрипт изменен в соответствии с новой вводной.

foma24 21-01-2013 09:50 2071482

все работает, огромное спасибо


Время: 22:27.

Время: 22:27.
© OSzone.net 2001-