martes, 20 de enero de 2026

Como elimnar archivos y carpetas que tengan más de 48 horas de ser creados

 

Hola a tod@s, hoy les traigo algo simple pero que resuelve algunos problemas de higiene de sistemas de archivos.

El requerimiento es como sigue : existe una carpeta llamada “Estados de cuenta”, el nombre es suficientemente descriptivo, el caso es que los usuarios generan allí archivos en pdf que se almacenan en subcarpetas que llevan como parte del nombre la fecha del día en que son generados, pero que luego de algún tiempo pierden validez pues los datos ya no son representativos del presente, ese período suele ser de 2 días (48 horas) luego de lo cual se convierten en “basura” y deben ser eliminados, aparte hay aplicaciones que utilizan archivos temporales que se guardan en la carpeta c:\temporal  otro nombre muy sugerente y por alguna razón que desconozco los creadores de dicha aplicación no eliminan su basura, que queda en forma de archivos que comienzan con la cadena de caracteres _7  luego sigue una serie de 7 caracteres y la terminación puede ser 7z, dbf, pdf, xls, xlsx.

Su misión si deciden aceptarla es crear un proceso automático para eliminar dichos archivos.

Lo más simple es crear un proceso por lotes que ejecute comandos para realizar dicha tarea y luego programar una tarea automática en el servidor para que se ejecute todos los días a una hora fija.

Lo de crear la tarea se hace con el task scheduler



Y no entraré en ese punto, así que vamos al procesamiento por lotes

 Creamos un archivo llamado “Borra_Archivosycarpetas.bat”  si ya sé que los nombres son sugerentes, pero esa es la idea, recordar que demonios hace un batch que creamos hace varios años.

 cls

@echo off

rem        *Establecer la Ruta de todos los usuarios

rem        ** Primero se borran los archivos de todas las subcarpetas

ForFiles /P "C:\Estados de cuenta" /S /D -3 /C "cmd /c del /q @path"

El parámetro /P dice que lo que viene a continuación es una ruta con la cual se va a trabajar, luego el parámetro /S le indica al sistema operativo que incluya las subcarpetas que existan, el parámetro /D le indica al sistema operativo que debe tomar únicamente aquellos archivos que tengan una antigüedad con el siguiente parámetro (-3) hace 3 días, osea, los que tengan más de 48 horas, el parámetro /C le indica que lo que viene a continuación es un comando  (del) que en efecto borra todo lo que esté en la ruta @Path que se fijó al principio con /P y finalmente el parámetro /q que indica que no pregunte si estás seguro que lo haga en modo silencioso.

 

rem        ** Luego se borran todas las subcarpetas

forfiles /s /d -3 /p "C:\Estados de cuenta" /c "cmd /c IF @isdir == TRUE rd /s /q @path"

Aquí la única diferencia es que se hace la pregunta si el archivo tratado es una carpeta @isdir, en cuyo caso se ejecuta el commando rd  (remove directory), que en efecto borra las subcarpetas que existan.

Si quisiéramos borrar carpetas que se encuentran en el escritorio de algún usuario en particular, la sintaxis sería como la siguiente, ojo que aquí se usan una variable llamada RUTA que se le asigna un valor con el comando SET; y que para utilizarla la ponemos entre signos de porcentaje %RUTA%

SET RUTA=C:\Users\TELEFONICO\Desktop\Estados de Cuenta

ForFiles /P "%RUTA%" /S /D -3 /C "cmd /c del /q @path"

rem        ** Luego se borran todas las subcarpetas con 3 o mas dias de antiguedad

forfiles /s /d -3 /p "%RUTA%" /c "cmd /c IF @isdir == TRUE rd /s /q @path"

 

SET RUTA=C:\Users\CENTRO\Desktop\Estados de Cuenta

ForFiles /P "%RUTA%" /S /D -3 /C "cmd /c del /q @path"

rem        ** Luego se borran todas las subcarpetas con 3 o mas dias de antiguedad

forfiles /s /d -3 /p "%RUTA%" /c "cmd /c IF @isdir == TRUE rd /s /q @path"

 

 

rem        ** se aprovecha la funcionalidad para borrar los respaldos que quedan

rem        ** almacenados en el servidor, dado que ya se subieron a DropBox, para liberar espacio

rem        ** y también se borran los archivos temporales que deja foxpro, todo con 2 días de antiguedad

rem        *Establecer la Ruta de los respaldos diarios

rem        ** Primero se borran los archivos .7z que tengan más de 2 días de antiguedad, no borrar los de hoy ni ayer

ForFiles /P "C:\Temporal\Datos" /m *.7z /D -2 /C "cmd /c del /q @path"

La novedad aquí es el parámetro /m  que le dice al sistema operativo que solo afecte aquellos archivos que cumplen con una mascara (por eso la m)  que tengan la extensión 7z

rem        ** Luego se borran los archivos temporales   _7*.dbf y pdf

del C:\Temporal\_7*.dbf C:\Temporal\_7*.pdf C:\Temporal\_7*.xls C:\Temporal\_7*.xlsx C:\Temporal\_7*.idx

 

Espero les sirva como orientación si se enfrentan a esta tarea, que es relativamente simple si se sabe como realizarla, me despido no sin antes felicitar a mi hermana Teresita y su esposo Alex que cumplen años el mismo día, eso fue hace unos días este Enero.

No hay comentarios: