Добрый день всем читающим!
Есть каталог D:\backup с набором подкаталогов, имеющих название по дате создания.
Каталоги в D:\backup:
2015.06.20
2015.06.21
2015.06.22
...
2015.06.29
Мне понадобилось сделать так, чтобы из набора этих папок
остались последние три.
Нашел код, прибавляющий N дней к текущей дате (при вводе -N отсчёт по дням идёт назад):
:FromNow
setLocal
set now=%date%
set /a yyyy=%now:~-4%
set /a mm=1%now:~3,2%-100
set /a dd=1%now:~,2%-100
set /a JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
set /a L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
set /a L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
set /a J=J+2-12*L,I=100*(N-49)+I+L
set /a yyyy=I,mm=100+J,dd=100+K
EndLocal& set yyyymmddborder=%yyyy%.%mm:~-2%.%dd:~-2%
На выходе при вызове функции имею дату (название папки), до которой нужно удалять папки:
call :FromNow -3
echo %yyyymmddborder%
> 2015.06.26
Осталось перебрать папки в цикле в обратном порядке, и начать удалять, когда будет встречено нужное название. В обычном виде отлично подходит FOR:
for /d %%B in (D:\backup\*) do echo %%B
Однако не могу разобраться, как сделать перебор каталогов в обратном порядке.
Вопросы:
1. Правилен ли путь с сортировкой в обратном порядке - и как его сделать?
2. Или есть другой, более простой вариант решения этой задачи?
Заранее благодарю за помощь.