Programar bat que elimine carpetas de más de 1 mes

Tengo unas carpetas creadas con la fecha del día creada, y mi intención es crear un .bat que cree la carpeta del día y elimine las de hace más de 1 mes a partir de la fecha actual.
He conseguido que me cree la carpeta del día, pero no sé como hacer que me borre estas más antiguas.
Agradeceré la ayuda que me pueda facilitar al respecto.
turi+

1 Respuesta

Respuesta
1
Antes de nada quiero aclarar que entiendo que el BAT lo vas a ejecutar desde la carpeta en la que quieres crear o borrar las carpetas de las que hablas y que entiendes por carpeta lo que antes se llamaba directorio. Puesto que la creación de la carpeta del día ya lo tienes resuelto me centraré en el borrado de las que llevan más de un mes creadas y asumo que más de un mes significa más de 30 días.
Este sería el código:
@echo off
for /f "skip=5 eol=; tokens=1,4" %%i in ('dir /ad') do (
if %%i==0 goto :EOF
call :revisar %%i %%j )
goto :EOF
:revisar
call :dias %1
set /a d=j
call :dias %DATE%
set /a d=j-d
if /i %d% GTR 30 rd /s /q %2
goto :EOF
:dias
rem Rutina de calculo obtenida de http://multingles.net/docs/jmt/difecha.htm.
rem Agradecimientos a José Manuel Tella Llop ([email protected])
for /f "tokens=1,2,3 delims=-/." %%a in ("%1") do (
   set dd=%%a&set mm=%%b&set aa=%%c)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=aa+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
goto :EOF
El "for /f" trata la lista de carpetas, obtenida mediante el comando "dir /ad" y deja en %%i la fecha de creación y en %%j el nombre. Si la fecha es 0 hemos llegado al final de la lista. Si no lo es llamamos a la rutina revisar que comprueba los días transcurridos hasta la fecha actual y si son más de 30 borra la carpeta con todo su contenido y sin avisar (comando "rd /s /q").
Si necesitas alguna aclaración no tienes más que decirlo.
Saludos,
GGG
Muchas gracias por la respuesta.
Aprovechando la consulta, ¿podrías decirme que parámetros debo modificar, en el caso de querer ampliar o reducir el plazo de tiempo, como p.e. a 10 días?
Muchas gracias de todas formas. Mañana lo programaré.
Saludos

Al responder a otra consulta me he encontrado con que había pendiente una respuesta en esta otra. Han pasado casi ocho años y lo más probable es que llegue tarde ;-)). Pero contestaré por si le sirviera a alguien:

El parámetro a modificar para cambiar el número de días es el "30" de la instrucción:

if /i %d% GTR 30 rd /s /q %2

Pido disculpas a turi72. No consigo explicarme como no me enteré de su respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas