Título: Batch para eliminar carpetas antiguas Publicado por: _CrisiS_ en 17 Agosto 2019, 20:05 pm Hola quisiera que me ayuden con un batch que pueda eliminar todas las carpetas que tengan en su fecha de creacion 5 dias de antiguedad a mas, estas carpetas se encuentran en una unidad de red "192.168.X.X\CARPETA\"
Título: Re: Batch para eliminar carpetas antiguas Publicado por: EdePC en 18 Agosto 2019, 17:21 pm Saludos,
- Batch tiene sus limitaciones para manipular fechas, y más aún si se trata de una fecha de creación. Lo usual es ayudarse de vbScript o hoy en día de PowerShell. - Por ejemplo el siguiente script en PowerShell Muestra (Write-Output) todas las carpetas (-Directory) del Escritorio que tengan una fecha de creación anterior a 5 días, esto lo hace de la forma correcta, tomando incluso los segundos: Código
-- Puedes reemplazar la Ruta y el comando final (Write-Output) por Remove-Item para eliminar en lugar de mostrar. Como siempre, recomiendo probar los comandos de manera no destructiva hasta que esté bien claro que es como se quiere que trabaje. -- El siguiente comando muestra de forma detallada la fecha de creación, última modificación y último acceso de las carpetas: Código
- Lo puedes ejecutar desde una consola CMD o un Bacth anteponiendo PowerShell y usando comillas dobles para el/los comandos a ejecutar: Código
- Si lo que necesitas es trabajar con fechas de modificación, se puede utilizar ForFiles. Título: Re: Batch para eliminar carpetas antiguas Publicado por: _CrisiS_ en 19 Agosto 2019, 22:09 pm Cuando hablas de ForFiles yo usaba este codigo
Código: ForFiles /p "\\192.168.4.60\bk_siaf\BACKUPS_DATA\" /s /d -5 /c "cmd /c del @file" Título: Re: Batch para eliminar carpetas antiguas Publicado por: EdePC en 20 Agosto 2019, 03:06 am - No se tiene que agregar el \ al final de la carpeta, lo correcto es:
Código
- Le agrego el /q al final para que no pregunte si hay que eliminar o no. Recordar que Del solo elimina ficheros y no carpetas. SI se le pasa una carpeta, Del elimina el contenido de dicha carpeta pero no a la carpeta en sí. Se puede usar RD /S /Q en su lugar haciendo un IF que compruebe si se trata de un Archivo o Directorio, usar Del o RD respectivamente: Código - Recordar que ForFiles solo trabaja con Fechas de Modificación, además de que no es tan sencillo ver las Fechas de Modificación y Último Acceso de las carpetas, estas no se muestran en la Propiedades de las Carpetas, ahí solo se muestra la fecha de creación. Para verlo hay que usar una Vista Detallada desde el Explorador de Windows o usar programas de terceros. -- También se pueden usar los siguientes comandos: --- Muestra las fechas de Creación, Modificación y Último acceso: Código
--- Muestra la Fecha de Modificación y nombre: Código Código
- Documentación en Inglés: https://ss64.com/nt/del.html https://ss64.com/nt/rd.html https://ss64.com/nt/dir.html https://ss64.com/nt/forfiles.html Título: Re: Batch para eliminar carpetas antiguas Publicado por: _CrisiS_ en 23 Agosto 2019, 05:52 am Según lo que voy entendiendo esos códigos me hacen una búsqueda de entre todas mis carpetas y dentro de ellas borran los archivos viejos no?
Yo quiero eliminar carpetas, aunque sea co su fecha de creación las mas antiguas, como podria ? Título: Re: Batch para eliminar carpetas antiguas Publicado por: EdePC en 23 Agosto 2019, 06:48 am - Usa llamadas a PowerShell como puse en mi primer mensaje, el siguiente script muestra solamente las carpetas que tienen una fecha de creación anterior a 5 días:
Código
- Si los resultados te convencen, cambia el mostrar por eliminar: Código
- Batch no maneja directamente las fechas de creación para esto, y se tendrían que hacer decenas de líneas de código o usar "librerías" externas, en su lugar se puede usar llamadas vbScript o más actual y corto: PowerShell tal cual lo he puesto. Código Echo Proceso completado Pause |