elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Batch para eliminar carpetas antiguas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Batch para eliminar carpetas antiguas  (Leído 9,385 veces)
_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Batch para eliminar carpetas antiguas
« 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\"


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.159



Ver Perfil
Re: Batch para eliminar carpetas antiguas
« Respuesta #1 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
  1. Get-ChildItem 'C:\Users\EdSon\Desktop' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Write-Output

-- 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
  1. Get-ChildItem 'C:\Users\EdSon\Desktop' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Write-Output | Format-List

- Lo puedes ejecutar desde una consola CMD o un Bacth anteponiendo PowerShell y usando comillas dobles para el/los comandos a ejecutar:

Código
  1. PowerShell "Get-ChildItem 'C:\Users\EdSon\Desktop' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Write-Output | Format-List"

- Si lo que necesitas es trabajar con fechas de modificación, se puede utilizar ForFiles.


En línea

_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: Batch para eliminar carpetas antiguas
« Respuesta #2 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"
pero no funcioonaba
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.159



Ver Perfil
Re: Batch para eliminar carpetas antiguas
« Respuesta #3 en: 20 Agosto 2019, 03:06 am »

- No se tiene que agregar el \ al final de la carpeta, lo correcto es:

Código
  1. ForFiles /p "\\192.168.4.60\bk_siaf\BACKUPS_DATA" /s /d -5 /c "cmd /c del @file /q"

- 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
  1. FORFILES /P "\\192.168.4.60\bk_siaf\BACKUPS_DATA" /D -5 /C "CMD /C IF '@isdir'=='TRUE' (RD /S /Q @file) ELSE (DEL /Q @file)"

- 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
  1. PowerShell "Get-ChildItem '\\192.168.4.60\bk_siaf\BACKUPS_DATA' -Recurse | Format-List"

--- Muestra la Fecha de Modificación y nombre:

Código
  1. ForFiles /p "\\192.168.4.60\bk_siaf\BACKUPS_DATA" /s /d -5 /c "cmd /c echo @fdate @file"

Código
  1. Dir /O:D /T:W /S \\192.168.4.60\bk_siaf\BACKUPS_DATA

- 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
En línea

_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: Batch para eliminar carpetas antiguas
« Respuesta #4 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 ?
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.159



Ver Perfil
Re: Batch para eliminar carpetas antiguas
« Respuesta #5 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
  1. PowerShell "Get-ChildItem '\\192.168.4.60\bk_siaf\BACKUPS_DATA' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Write-Output | Format-List"

- Si los resultados te convencen, cambia el mostrar por eliminar:

Código
  1. PowerShell "Get-ChildItem '\\192.168.4.60\bk_siaf\BACKUPS_DATA' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Remove-Item"

- 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
  1. @Echo Off
  2. Echo Mostrando carpetas anteriores a 5 días en \\192.168.4.60\bk_siaf\BACKUPS_DATA:
  3. PowerShell "Get-ChildItem '\\192.168.4.60\bk_siaf\BACKUPS_DATA' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Write-Output | Format-List"
  4. Echo Eliminando carpetas ...
  5. PowerShell "Get-ChildItem '\\192.168.4.60\bk_siaf\BACKUPS_DATA' -Directory | Where-Object {(Get-Date).AddDays(-5) -gt $_.CreationTime} | Remove-Item"
Echo Proceso completado
Pause
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar carpetas segun su nombre BATCH
Scripting
Fabiang 1 5,335 Último mensaje 16 Julio 2010, 20:34 pm
por Fabiang
Programita para eliminar LNK y recuperar carpetas
Scripting
erickvcr 5 5,127 Último mensaje 20 Septiembre 2011, 19:23 pm
por erickvcr
¿Quieres eliminar a tu ex de las antiguas fotos? Ahora es posible
Noticias
wolfbcn 0 1,457 Último mensaje 3 Noviembre 2012, 01:31 am
por wolfbcn
SCRIPT PARA ELIMINAR CARPETAS
Seguridad
achebedos 2 4,290 Último mensaje 13 Noviembre 2017, 15:13 pm
por achebedos
No consigo copiar carpetas mas antiguas. VBS. Help....
Scripting
jarpon 2 2,834 Último mensaje 24 Septiembre 2023, 18:30 pm
por jarpon
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines