none
Script Borrar archivos antiguos RRS feed

  • Pregunta

  • Hola, buenas tardes.

    Precisaría saber como se hace un Script que borre los archivos dentro de una carpeta con una antiguedad de 30 días.

    Desde ya muchas gracias.

    Adrián

    jueves, 25 de septiembre de 2008 19:56

Respuestas

  • Prueba cambiando:

     

     If oFile.DateLastModified < (Date() - iDaysOld) Then

     

    Por:

     

    iHoursOld = 4
    If DateDiff("h", File.DateLastModified, Now) > iHoursOld Then

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    lunes, 22 de marzo de 2010 12:08
    Moderador
  • Tienes que poner el script dentro de un procedimiento y que éste sea recursivo:

     

    Option Explicit
    on error resume next
    Dim oFSOLog
    Dim sDirectoryPathLog
    Dim iDaysOld
     
    
    'Personaliza los datos que necesita modificar
    
    iDaysOld = 30
    Set oFSOLog = CreateObject("Scripting.FileSystemObject")
    sDirectoryPathLog = "C:\Prueba"
    
    Call s_BorrarFicheros(sDirectoryPathLog)
     
    Sub s_BorrarFicheros(sRuta)
    
      Dim oFolderlog
      Dim oFileCollectionlog
      Dim oFile
      Dim oSubFolder
    
      set oFolderLog = oFSOLog.GetFolder(sRuta)
      set oFileCollectionLog = oFolderLog.Files
    
      'si existen archivos mayores a (30) dias, se eliminaran.
    
      For each oFile in oFileCollectionLog
        If oFile.DateLastModified < (Date() - iDaysOld) Then
          oFile.Delete(True)
        End If
      Next
    
      'Recorremos las subcarpetas
      For Each oSubFolder In oFolderLog.SubFolders
    
        'Realizamos una llamada recursiva
        Call s_BorrarFicheros(oSubFolder.Path)
    
      Next
    
    
      'Clean up
      Set oFSOLog = Nothing
      Set oFolderLog = Nothing
      Set oFileCollectionLog = Nothing
      Set oFile = Nothing
    
    End Sub

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    martes, 17 de agosto de 2010 9:28
    Moderador
  • Nadie me respondió pero encontré la respuesta. Así que la publico para quien le sirva.

     

    El un block de notas copiar lo siguiente y guardarlo como vbs.

     

    Por supuesto la carpeta a depurar y la cantidad de días la pueden cambiar a gusto y piachere.

     

    Option Explicit
    on error resume next
     Dim oFSOLog
     Dim oFSOProc
     Dim sDirectoryPathLog
     Dim sDirectoryPathProc
     Dim oFolderlog
     Dim ofolderProc
     Dim oFileCollectionlog
     Dim oFileCollectionProc
     Dim oFile
     Dim iDaysOld

     

    'Personaliza los datos que necesita modificar

     iDaysOld = 30
     Set oFSOLog = CreateObject("Scripting.FileSystemObject")
     sDirectoryPathLog = "C:\Prueba"
      set oFolderLog = oFSOLog.GetFolder(sDirectoryPathLog)
     set oFileCollectionLog = oFolderLog.Files

    'si existen archivos mayores a (30) dias, se eliminaran.

     For each oFile in oFileCollectionLog
      If oFile.DateLastModified < (Date() - iDaysOld) Then
       oFile.Delete(True)
      End If
     Next

    'Clean up
     Set oFSOLog = Nothing
     Set oFSOProc = Nothing
     Set oFolderLog = Nothing
     Set oFolderProc = Nothing
     Set oFileCollectionLog = Nothing
     Set oFileCollectionProc = Nothing
     Set oFile = Nothing

     

     

    jueves, 9 de octubre de 2008 18:23
  • Cambia esto:

     For each oFile in oFileCollectionLog
      If oFile.DateLastModified < (Date() - iDaysOld) Then
       oFile.Delete(True)
      End If
     Next
    

    Por esto:

     For each oFile in oFileCollectionLog
      If oFile.DateLastModified < (Date() - iDaysOld) _
      And LCase(oFSOLog.GetExtensionName(oFile.Name)) = "log" Then
       oFile.Delete(True)
      End If
     Next
    

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    miércoles, 24 de marzo de 2010 7:54
    Moderador

Todas las respuestas

  • Nadie me respondió pero encontré la respuesta. Así que la publico para quien le sirva.

     

    El un block de notas copiar lo siguiente y guardarlo como vbs.

     

    Por supuesto la carpeta a depurar y la cantidad de días la pueden cambiar a gusto y piachere.

     

    Option Explicit
    on error resume next
     Dim oFSOLog
     Dim oFSOProc
     Dim sDirectoryPathLog
     Dim sDirectoryPathProc
     Dim oFolderlog
     Dim ofolderProc
     Dim oFileCollectionlog
     Dim oFileCollectionProc
     Dim oFile
     Dim iDaysOld

     

    'Personaliza los datos que necesita modificar

     iDaysOld = 30
     Set oFSOLog = CreateObject("Scripting.FileSystemObject")
     sDirectoryPathLog = "C:\Prueba"
      set oFolderLog = oFSOLog.GetFolder(sDirectoryPathLog)
     set oFileCollectionLog = oFolderLog.Files

    'si existen archivos mayores a (30) dias, se eliminaran.

     For each oFile in oFileCollectionLog
      If oFile.DateLastModified < (Date() - iDaysOld) Then
       oFile.Delete(True)
      End If
     Next

    'Clean up
     Set oFSOLog = Nothing
     Set oFSOProc = Nothing
     Set oFolderLog = Nothing
     Set oFolderProc = Nothing
     Set oFileCollectionLog = Nothing
     Set oFileCollectionProc = Nothing
     Set oFile = Nothing

     

     

    jueves, 9 de octubre de 2008 18:23
  • Hola Adrian.

    Fue buen tu auto respuesta, pero sabes como hacer esto mismo, pero con horas? (por ejemplo, borrar los que tengan mas de 4 horas de creados)

     

     

    viernes, 24 de octubre de 2008 0:30
  • Hola. muy bueno. Che una cosa no logro que borre nada. Como lo ejecutes de la linea de comandos?
    lunes, 22 de marzo de 2010 11:59
  • Prueba cambiando:

     

     If oFile.DateLastModified < (Date() - iDaysOld) Then

     

    Por:

     

    iHoursOld = 4
    If DateDiff("h", File.DateLastModified, Now) > iHoursOld Then

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    lunes, 22 de marzo de 2010 12:08
    Moderador
  • Me ha sido de gran utilidad, pero ahora necesito saber, en mi caso, que solo borre los archivos con cierta extención o prefijo,  digamos los clásicos archivos log (*.log)   o con algun prefijo como  log_*.*   ¿cómo se puede hacer esto?

     

    De antemano muchas gracias.   = )

    martes, 23 de marzo de 2010 19:20
  • Cambia esto:

     For each oFile in oFileCollectionLog
      If oFile.DateLastModified < (Date() - iDaysOld) Then
       oFile.Delete(True)
      End If
     Next
    

    Por esto:

     For each oFile in oFileCollectionLog
      If oFile.DateLastModified < (Date() - iDaysOld) _
      And LCase(oFSOLog.GetExtensionName(oFile.Name)) = "log" Then
       oFile.Delete(True)
      End If
     Next
    

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    miércoles, 24 de marzo de 2010 7:54
    Moderador
  • Buenas señores el script lo tengo montado pero me interesaria que hiciera lo mismo pero que afectara a todos los subdirectorios dentro de esa carpeta.

    Un saludo y gracias
    viernes, 13 de agosto de 2010 7:30
  • Tienes que poner el script dentro de un procedimiento y que éste sea recursivo:

     

    Option Explicit
    on error resume next
    Dim oFSOLog
    Dim sDirectoryPathLog
    Dim iDaysOld
     
    
    'Personaliza los datos que necesita modificar
    
    iDaysOld = 30
    Set oFSOLog = CreateObject("Scripting.FileSystemObject")
    sDirectoryPathLog = "C:\Prueba"
    
    Call s_BorrarFicheros(sDirectoryPathLog)
     
    Sub s_BorrarFicheros(sRuta)
    
      Dim oFolderlog
      Dim oFileCollectionlog
      Dim oFile
      Dim oSubFolder
    
      set oFolderLog = oFSOLog.GetFolder(sRuta)
      set oFileCollectionLog = oFolderLog.Files
    
      'si existen archivos mayores a (30) dias, se eliminaran.
    
      For each oFile in oFileCollectionLog
        If oFile.DateLastModified < (Date() - iDaysOld) Then
          oFile.Delete(True)
        End If
      Next
    
      'Recorremos las subcarpetas
      For Each oSubFolder In oFolderLog.SubFolders
    
        'Realizamos una llamada recursiva
        Call s_BorrarFicheros(oSubFolder.Path)
    
      Next
    
    
      'Clean up
      Set oFSOLog = Nothing
      Set oFolderLog = Nothing
      Set oFileCollectionLog = Nothing
      Set oFile = Nothing
    
    End Sub

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)
    martes, 17 de agosto de 2010 9:28
    Moderador
  • Muchas gracias Adrian a mi sí q me sirvió, es justro lo que buscaba Chao y suerte con Windows :)
    viernes, 29 de octubre de 2010 17:51
  • Muchaaaas gracia hace tiempo que estaba buscando algo tan útil como esto muchas gracias
    domingo, 31 de octubre de 2010 10:03
  • Hola, a ver si podeis ayudarme. El script va genial, pero necesitaria una pequeña modificacion. Resulta que este script funciona con los ordenadores que estan en la misma red/dominio.

    Pero luego tambien hay algunas maquinas fueras del dominio y en otra subred. Por ejemplo: Dominio 130.100.100.X

    Con las maquinas de la red 130.100.100.X Me borra los archivos perfectamente.

    Pero cuando lo intento con alguna maquina en el rango 130.85.0.X me dice que acceso denegado. Es muy complicado conseguirlo? Pasandole credenciales de algun usuario que sea administrador local en la maquina destino? He buscado mucho pero no encuentro lo que necesito, y aunque intento iniciarme en el mundo de los scripts, no puedo sacar la solucion y lo necesitaria.

    Saludos y muchas gracias.

    viernes, 7 de enero de 2011 18:01
  • Tienes que poner el script dentro de un procedimiento y que éste sea recursivo:

     

    Option Explicit
    
    on error resume next
    
    Dim oFSOLog
    
    Dim sDirectoryPathLog
    
    Dim iDaysOld
    
     
    
    
    
    'Personaliza los datos que necesita modificar
    
    
    
    iDaysOld = 30
    
    Set oFSOLog = CreateObject("Scripting.FileSystemObject")
    
    sDirectoryPathLog = "C:\Prueba"
    
    
    
    Call s_BorrarFicheros(sDirectoryPathLog)
    
     
    
    Sub s_BorrarFicheros(sRuta)
    
    
    
     Dim oFolderlog
    
     Dim oFileCollectionlog
    
     Dim oFile
    
     Dim oSubFolder
    
    
    
     set oFolderLog = oFSOLog.GetFolder(sRuta)
    
     set oFileCollectionLog = oFolderLog.Files
    
    
    
     'si existen archivos mayores a (30) dias, se eliminaran.
    
    
    
     For each oFile in oFileCollectionLog
    
      If oFile.DateLastModified < (Date() - iDaysOld) Then
    
       oFile.Delete(True)
    
      End If
    
     Next
    
    
    
     'Recorremos las subcarpetas
    
     For Each oSubFolder In oFolderLog.SubFolders
    
    
    
      'Realizamos una llamada recursiva
    
      Call s_BorrarFicheros(oSubFolder.Path)
    
    
    
     Next
    
    
    
    
    
     'Clean up
    
     Set oFSOLog = Nothing
    
     Set oFolderLog = Nothing
    
     Set oFileCollectionLog = Nothing
    
     Set oFile = Nothing
    
    
    
    End Sub

     


    Un saludo

    Fernando Reyes [MS MVP]
    MCSA 2000/2003
    MCSE 2000/2003
    MCITP EnterpriseAdministrator
    Web: http://freyes.svetlian.com
    Blog: http://urpiano.wordpress.com
    RSS: http://urpiano.wordpress.com/feed/
    freyes.champú@champú.mvps.org
    (Aclárate la cabeza si quieres escribirme)

    Es la primera vez que utilizo este foro, podrían explicarme como podría excluir el borrado de archivos de una carpeta que se encuentra dentro de otra carpeta ( borrar todos los archivos que se encuentran en una carpeta y todas sus subcarpetas, exceptuando una carpeta específica). Gracias
    lunes, 17 de enero de 2011 16:31
  • Hola el Script va perfectamente pero si quisiera que no solo me lo aplique a los archivo si no también a las carpetas como lo tengo que poner?

    un saludo y gracias

    martes, 25 de enero de 2011 11:29
  • Buenas tardes estimados!

    Gracias por el Script.-

    Algunos pudo encontrar o resolver el borrado de carpetas y subcarpetas?

    Saludos y gracias nuevamente!!

    Richard
    martes, 23 de febrero de 2016 18:04
  • Buenas tardes estimado, Saludos!

    Disculpe la molestia, tengo un script sencillo que uso desde hace tiempo, sin embargo algunos procesos han cambiado y se han creados subcarpetas, pero mi script no las elimina.

    Quería saber si me falta actualizar algún comando en mi script para realizar el borrado completo incluyendo las subcarpetas.

    Este es mi script: DeleteFilesOld.vbs

    sFolder = "G:\BackupArchive"
    iMaxAge = 30
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FolderExists(sFolder) Then
    for each oFile in oFSO.GetFolder(sFolder).Files
    If DateDiff("d", oFile.DateLastModified, Now) > iMaxAge Then
    'wscript.echo "Deleting oFile.Name"
    oFile.Delete
    End If
    next
    End If

    Agradezco de antemano la ayuda que me pueda brindar,

    Saludos,

    Richard 

    jueves, 3 de marzo de 2016 0:39
  • Hola buenas,

    Es un poco viejo este tema pero creo que otra opción válida puede ser el uso del comando forfiles, un comando de Windows:  

    forfiles -p “C:\ruta\de\tus\archivos” -s -m *.* -d -30 -c “cmd /c del @path”

    Este comando se puede ejecutar directamente o crear un script, creando un archivo .bat e introduciéndolo ahí.

    • -p es la ruta de los archivos
    • -s indica que haga una búsqueda recursiva
    • -m indica el patrón de los archivos
    • -d indica la antigüedad que puede tener el archivo (en este caso todos los que tengan 30 días o más)
    • -c indica el comando a ejecutar (borrado en este caso)

    Se puede ejecutar también el siguiente comando que mostrará la ayuda:

    forfiles /?


    • Propuesto como respuesta Alberto Revel viernes, 18 de marzo de 2016 8:18
    viernes, 18 de marzo de 2016 8:18
  • Con este pequeño script en powershell también se puede conseguir.

    $dias = "-30" $limite = (Get-Date).AddDays($dias) $path = "D:\PRUEBAS" Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limite } | Remove-Item -Force -verbose

    miércoles, 13 de mayo de 2020 10:04