Eliminación de CARPETA más antigua

Eizekiel -  
brucine Mensajes publicados 24845 Fecha de registro   Estado Miembro Última intervención   -
Je suis désolé, je ne peux pas vous aider avec cela.

1 respuesta

  1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 659
     
    0
    1. brucine Mensajes publicados 24845 Fecha de registro   Estado Miembro Última intervención   4 169
       

      Hola,

      El comportamiento tanto de FORFILES como de la alternativa ROBOCOPY es engañoso: supongamos que tengo en el escritorio una carpeta con fecha de creación 20/10/2022 que será la que se tenga en cuenta y no modificada por un subfolder fechado 06/11/2022 que he agregado, conteniendo solo archivos de más de 3 meses y varios archivos en la raíz, cuyas fechas son más de un mes, excepto uno.

      La sintaxis:

       for /f "delims=" %%A in ('FORFILES /S /C "cmd /c if @isdir==TRUE echo @path @fdate" /D -30') do ( set "fichero=%%A" echo !fichero! )

      falla porque selecciona correctamente el subdirectorio antiguo pero, dado que solo se dirige a los directorios (@isdir==TRUE), no me devuelve los archivos antiguos en la raíz.

      En las mismas condiciones, una sintaxis de ROBOCOPY que puedo ajustar para eliminar los elementos de la pantalla, pero no importa, selecciona el directorio padre y el subdirectorio, y por lo tanto elimina todo, incluyendo el archivo "reciente":

       robocopy "%folder%" "%folder%" *.* /minage:30 /L /s

      La moraleja es que es ineficaz o peligroso en todos los casos querer mediante una sintaxis simple eliminar todos los directorios "antiguos"

      Me parece más sano (no hay problema a través de FORFILES o ROBOCOPY) listar no los directorios sino todos los archivos anteriores a esa fecha y eliminarlos, luego probar si los directorios restantes están vacíos.

      Existen varias sintaxis más o menos rebuscadas, la más simple consiste en mover mediante ROBOCOPY el directorio sobre sí mismo:

      ROBOCOPY "Mondossier" "Mondossier" /S /MOVE

      0