Borrar archivos de una carpeta y subcarpetas, más antiguos de X días?

Hola, tenemos un programa que nos genera copias automáticas en una carpeta, y no es posible indicarle que guarde solo X días en concreto (por ejemplo, que siempre guarde los últimos 10 días)

Cada vez que salimos, genera una copia dentro de una carpeta, y va llenando el disco duro hasta que nos damos cuenta

La copia la genera dentro de una carpeta y dentro de esta genera subcarpetas con los días de las copias.

Ejemplo:

C:\COPIAS
C:\COPIAS\EMP1_010323
C:\COPIAS\EMP1_020323
C:\COPIAS\EMP1_030323
C:\COPIAS\EMP1_040323
.... y así sucesivamente

Hemos probado con
FORFILES /P c:\copias" /s /d -7 /c "cmd /c del @file"

pero solo borra los archivos que hay dentro de COPIAS, pero no las subcarpetas....

donde radica el problema?
Hola, disculpa si digo una cafrada, podría deberse al tipo de copia programada, que puede ser completa, incremental, o diferencial. Para hacer el borrado de las subcarpetas imagino que la configuración previa de las copias debera ser incremental. Si por favor puedes decirnos qué aplicación utilizas sería de utilidad para recabar información.

https://es.wikipedia.org/wiki/Copia_de_seguridad

Podrías probar llegado el caso con otro programa de equivalente al que utilizas, como Synkron,GoodSync, SyncBack, Cobian Backup, Duplicati o Filemenutools.

He tratado de indagar pero me es imposible sin conocer el nombre del programa.

https://stackoverflow-com.translate.goo ... _tr_pto=sc

https://superuser-com.translate.goog/qu ... _tr_pto=sc
El problema es que el programa es de la cafetería de la escuela donde trabajo, y es el propio programa el que las hace.

Utilizamos el BDP-NET CASH

https://www.bdpcenter.com/es/programas- ... afeterias/

Los que nos llevan el programa dicen que no es posible programar copias con una duración de X días, y que tenemos que borrar manualmente [facepalm] y me parece muy raro. Lo hemos solicitado muchas veces, pero nos dicen que no.

En el propio ordenador ya tenemos el programa que nos hace las copias de toda la carpeta del programa y de su carpeta SQL hacía el NAS, diarias con un tope de 30 días (por si acaso). Pero los del programa nos dijeron que si no era la propia copia del programa, que nuestras copias no irían, (también muy raro). pero por seguridad las hacemos también .
Pero si nosotros tenemos exactamente el mismo problema! y lo hemos resuelto con un script para powershell!
hay un comando que exactamente hace eso, indicas que borre los ficheros que tengan más de 7 días, en nuestro caso! pero vaya, que ya lo tienes caso hecho, es añadir una letras más al comando de forfiles [beer]
Seguramente tendrás que jugar un poco con el parámetro @isdir para distinguir cuando es un directorio y aplicar una instrucción de borrado adecuada... ojo que no he probado lo que viene a continuación
Vigila no la lies :)

FORFILES /C "cmd if @isdir==TRUE rmdir @file /s /q"


Gracias por tu soporte! cualquier aportación siempre se agradece!

joanvicent escribió:Pero si nosotros tenemos exactamente el mismo problema! y lo hemos resuelto con un script para powershell!
hay un comando que exactamente hace eso, indicas que borre los ficheros que tengan más de 7 días, en nuestro caso! pero vaya, que ya lo tienes caso hecho, es añadir una letras más al comando de forfiles [beer]


Joan, si lo has solucionado...dime los comandos que faltan! jajajajaja XD

RuSpider escribió:Seguramente tendrás que jugar un poco con el parámetro @isdir para distinguir cuando es un directorio y aplicar una instrucción de borrado adecuada... ojo que no he probado lo que viene a continuación
Vigila no la lies :)

FORFILES /C "cmd if @isdir==TRUE rmdir @file /s /q"


Gracias! lo probaré ! (siempre hago las pruebas en máquinas virtuales!)
acabo de preguntarle a chatgpt y me ha dado el siguiente comando:

Get-ChildItem -Path "C:\Ruta\Del\Fichero" -Recurse | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item


y la siguiente explicación:

Este comando utiliza la cmdlet "Get-ChildItem" para obtener todos los archivos de la ruta especificada y sus subcarpetas con la opción "-Recurse". Luego, utiliza la función "Where-Object" para filtrar los archivos que tienen una fecha de modificación anterior a siete días atrás, utilizando la propiedad "LastWriteTime" del objeto. Por último, utiliza la cmdlet "Remove-Item" para borrar los archivos filtrados. Asegúrate de cambiar la ruta de acuerdo a tus necesidades.
FORFILES -P "c:\copias" -s -d -7 /c "cmd /c rd @path /q /s"
FORFILES -P "c:\copias" -s -d -7 /c "cmd /c del @file /q"

Con esta opción también funciona (aunque acaba dango algunos mensajes raros".

Con la primera opción borra primero las carpetas y luego los archivos, y me deja solo las carpetas y archivos de 7 días o menos.
8 respuestas