none
Script para listar ficheros con ultimo acceso/modificacion RRS feed

  • Pregunta

  • Muy buenas a todos,

    Me gustaria ver si me podeis echar una ayuda, ya que en el tema de los scripts no es que sea un hacha y creo que se puede realizar lo que busco.

    Resulta que tengo una unidad E: llena de carpetas y ficheros. Aproximadamente unos 500Gb. Me gustaria poder listar los ficheros que no han sido ni accedidos ni modificados desde una fecha concreta. De manera que me los liste y me diga en la ubicacion que se encuentran.

    Sabeis de que forma poder realizarlo o alguno tiene algun script que lo haga, de cara a revisarlo y poder lanzarlo?

    Muchisimas gracias de antemano.

    miércoles, 5 de octubre de 2011 14:25

Respuestas

  • A ver si te sirve. He hecho este script que da el listado de ficheros cuyas fechas de modificación y de último acceso sean iguales o anteriores a las fechas recibidas como los respectivos parámetros. El listado se hace sobre una carpeta y se puede realizar de forma recursiva.

    Sintaxis

    cscript //nologo Listar-FicherosViejos.vbs /C:ruta /M:fecha /A:fecha [/R]

    Siendo

    • C (requerido): ruta de la carpeta a listar. Si tiene espacios hay que encerrarla entre comillas.
    • M (requerido): fecha de última modificación en formato DD/MM/YYYY.
    • A (requerido): fecha de último acceso en formato DD/MM/YYYY.
    • R   (opcional): si se pasa este modificador se listará todo el subárbol de carpetas que tiene como carpeta raíz la pasada como parámetro /C.


    Ejemplo

    cscript //nologo Listar-FicherosViejos.vbs /C:"C:\No borrar" /M:"24/09/2011" /A:"24/09/2011" /R:

    Este es el código del script:

    Dim str_Carpeta
    Dim dth_FechaModificacion
    Dim dth_FechaAcceso
    Dim bol_Recursivo
    Dim bol_Inicio
    
    If WScript.Arguments.Named.Exists("?") Then
    
        Call s_Ayuda
        WScript.Quit 0
        
    End If
    
    str_Carpeta = WScript.Arguments.Named("C")
    dth_FechaModificacion = WScript.Arguments.Named("M")
    dth_FechaAcceso = WScript.Arguments.Named("A")
    bol_Recursivo = WScript.Arguments.Named.Exists("R")
    bol_Inicio = True
    
    Call s_ListarFicherosViejos(str_Carpeta, dth_FechaModificacion, _
                                dth_FechaAcceso, bol_Recursivo)
    
    Sub s_ListarFicherosViejos(str_Ruta, dth_FechaModificacion, _
                               dth_FechaAcceso, bol_Recursivo)
    '***********************************************************************
    '* Procedimiento: s_ListarFicherosViejos                               *
    '* Tipo         : Función                                              *
    '* Devolución   : Booleana                                             *
    '* Fecha y Hora : 10/2011                                              *
    '* Autor        : Fernando Reyes                                       *
    '*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
    '* Propósito    : Este método lista los ficheros contenidos en la      *
    '*                carpeta especificada por el parámetro str_Ruta cuyas *
    '*                fechas de modificación y de último ascceso sean      *
    '*                iguales o anteriores a las recibidas como los        *
    '*                de fecha correspondientes (dth_FechaModificacion para*
    '*                la fecha de modificación y dth_FechaAcceso para la de*
    '*                último acceso. Si el parámetro bol_Recursivo tiene   *
    '*                valor True, el método realiza una llamada recursiva, *
    '*                lo que provoca que el listado se produzca de todo el *
    '*                árbol de carpetas cuya raíz es la que especifica el  *
    '*                parámetro str_Ruta.                                  *
    '***********************************************************************
    
        Dim obj_FSO       'As Scripting.FileSystemObject
        Dim obj_Carpeta   'As Scripting.Folder
        Dim obj_Fichero   'As Scripting.File
        Dim bol_Borrar    'As Boolean
        Dim byt_Quit      'As Byte
    
        byt_Quit = 0
    
        'Creamos el objeto FileSystemObject
        Set obj_FSO = CreateObject("Scripting.FileSystemObject")
    
        'Comprobamos que la ruta recibida sea válida
        If not obj_FSO.FolderExists(str_Ruta) Then
    
            WScript.Echo "Error 1: La carpeta " & str_Ruta & _
                               " recibida como parámetro /C no existe."
            Set obj_FSO = Nothing
            byt_Quit = 1
    
        End If
    
        'Comprobamos que la fecha de modificación recibida sea válida
        If Not IsDate(dth_FechaModificacion) Then
    
            WScript.Echo "Error 2: La fecha de modificación " & dth_Fecha & _
                         " recibida como parámetro /M no es una fecha válida."
            Set obj_FSO = Nothing
            byt_Quit = byt_Quit + 2
    
        End If
    
        'Comprobamos que la fecha de acceso recibida sea válida
        If Not IsDate(dth_FechaAcceso) Then
    
            WScript.Echo "Error 4: La fecha de acceso " & dth_Fecha & _
                         " recibida como parámetro /A no es una fecha válida."
            byt_Quit = byt_Quit + 4
    
        End If
        
        'Se si ha producido algún error en los parámetros, se termina
        'el script mostrando la ayuda
        If byt_Quit > 0 Then
        
            Set obj_FSO = Nothing
            Call s_Ayuda
            WScript.Quit byt_Quit
            
        End If
    
        'Obtenemos el objeto carpeta
        Set obj_Carpeta = obj_FSO.GetFolder(str_Ruta)
    
        'Recorremos los ficheros contenidos en la carpeta
        For Each obj_Fichero In obj_Carpeta.Files
    
            If (DateValue(obj_Fichero.DateLastModified) <= _
                                            DateValue(dth_FechaModificacion)) _
            And(DateValue(obj_Fichero.DateLastAccessed) <= _
                                            DateValue(dth_FechaAcceso)) Then
    
                If bol_Inicio Then
                
                    WScript.Echo "Carpeta" & vbTab & _
                                 "Fichero" & vbTab & _
                                 "Tipo" & vbTab & _
                                 "Tamaño" & vbTab & _
                                 "Creado" & vbTab & _
                                 "Modificado" & vbTab & _
                                 "Accedido"
                    bol_Inicio = False
                  
                End If
                'Mostramos la información del fichero por pantalla
                WScript.Echo str_Ruta & vbTab & _
                             obj_Fichero.Name & vbTab & _
                             obj_Fichero.Type & vbTab & _
                             obj_Fichero.Size & vbTab & _
                             obj_Fichero.DateCreated & vbTab & _
                             obj_Fichero.DateLastModified & vbTab & _
                             obj_Fichero.DateLastAccessed
            
            End If
    
        Next
    
        'Si queremos que se recorra todo el subárbol de carpetas...
        If bol_Recursivo Then
    
            'Definimos un objeto para las subcarpetas
            Dim obj_Subcarpeta
    
            'Recorremos las subcarpetas en este bucle
            For Each obj_Subcarpeta In obj_Carpeta.Subfolders
    
                'Llamada recursiva para borrar los ficheros de la
                'subcarpeta
                Call s_ListarFicherosViejos(obj_Subcarpeta.Path, _
                                            dth_FechaModificacion, _
                                      dth_FechaAcceso, bol_Recursivo)
    
            Next
    
            Set obj_Subcarpeta = Nothing   
    
        End If
    
        'Nos limpiamos el culito antes de terminar :-))
        Set obj_Fichero = Nothing
        Set obj_Carpeta = Nothing
        Set obj_FSO = Nothing
    
    End Sub 's_BorrarFicheros
    
    Sub s_Ayuda()
    
        WScript.Echo "Listado de ficheros cuyas fechas de " & _
                     "modificación y de último acceso sean " & _
                     "iguales o anteriores a las fechas " & _
                     "recibidas como los respectivos " & _
                     "parámetros. El listado se hace sobre " & _
                     "una carpeta y se puede realizar de " & _
                     "forma recursiva."
        WScript.Echo ""
        WScript.Echo "Sintaxis"
        WScript.Echo ""
        WScript.Echo "cscript //nologo Listar-FicherosViejos.vbs /C:ruta /M:fecha " & _
                     "/A:fecha [/R]"
        WScript.Echo ""
        WScript.Echo "Siendo"
        WScript.Echo ""
        WScript.Echo "    - C (requerido): ruta de la carpeta a listar. Si tiene e" & _
                     "spacios hay que encerrarla entre comillas."
        WScript.Echo "    - M (requerido): fecha de última modificación en formato" & _
                     " DD/MM/YYYY."
        WScript.Echo "    - A (requerido): fecha de último acceso en formato DD/MM" & _
                     "/YYYY."
        WScript.Echo "    - R  (opcional): si se pasa este modificador se listará " & _
                     "todo el subárbol de carpetas que tiene como carpeta raíz la " & _
                     "pasada como parámetro /C."
        WScript.Echo ""
        WScript.Echo "Ejemplo"
        WScript.Echo ""
        WScript.Echo "cscript //nologo Listar-FicherosViejos.vbs /C:""C:\No borrar" & _
                     """ /M:""24/09/2011"" /A:""24/09/2011"" /R"
    
    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)

    jueves, 6 de octubre de 2011 8:47
    Moderador

Todas las respuestas

  • A ver si te sirve. He hecho este script que da el listado de ficheros cuyas fechas de modificación y de último acceso sean iguales o anteriores a las fechas recibidas como los respectivos parámetros. El listado se hace sobre una carpeta y se puede realizar de forma recursiva.

    Sintaxis

    cscript //nologo Listar-FicherosViejos.vbs /C:ruta /M:fecha /A:fecha [/R]

    Siendo

    • C (requerido): ruta de la carpeta a listar. Si tiene espacios hay que encerrarla entre comillas.
    • M (requerido): fecha de última modificación en formato DD/MM/YYYY.
    • A (requerido): fecha de último acceso en formato DD/MM/YYYY.
    • R   (opcional): si se pasa este modificador se listará todo el subárbol de carpetas que tiene como carpeta raíz la pasada como parámetro /C.


    Ejemplo

    cscript //nologo Listar-FicherosViejos.vbs /C:"C:\No borrar" /M:"24/09/2011" /A:"24/09/2011" /R:

    Este es el código del script:

    Dim str_Carpeta
    Dim dth_FechaModificacion
    Dim dth_FechaAcceso
    Dim bol_Recursivo
    Dim bol_Inicio
    
    If WScript.Arguments.Named.Exists("?") Then
    
        Call s_Ayuda
        WScript.Quit 0
        
    End If
    
    str_Carpeta = WScript.Arguments.Named("C")
    dth_FechaModificacion = WScript.Arguments.Named("M")
    dth_FechaAcceso = WScript.Arguments.Named("A")
    bol_Recursivo = WScript.Arguments.Named.Exists("R")
    bol_Inicio = True
    
    Call s_ListarFicherosViejos(str_Carpeta, dth_FechaModificacion, _
                                dth_FechaAcceso, bol_Recursivo)
    
    Sub s_ListarFicherosViejos(str_Ruta, dth_FechaModificacion, _
                               dth_FechaAcceso, bol_Recursivo)
    '***********************************************************************
    '* Procedimiento: s_ListarFicherosViejos                               *
    '* Tipo         : Función                                              *
    '* Devolución   : Booleana                                             *
    '* Fecha y Hora : 10/2011                                              *
    '* Autor        : Fernando Reyes                                       *
    '*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
    '* Propósito    : Este método lista los ficheros contenidos en la      *
    '*                carpeta especificada por el parámetro str_Ruta cuyas *
    '*                fechas de modificación y de último ascceso sean      *
    '*                iguales o anteriores a las recibidas como los        *
    '*                de fecha correspondientes (dth_FechaModificacion para*
    '*                la fecha de modificación y dth_FechaAcceso para la de*
    '*                último acceso. Si el parámetro bol_Recursivo tiene   *
    '*                valor True, el método realiza una llamada recursiva, *
    '*                lo que provoca que el listado se produzca de todo el *
    '*                árbol de carpetas cuya raíz es la que especifica el  *
    '*                parámetro str_Ruta.                                  *
    '***********************************************************************
    
        Dim obj_FSO       'As Scripting.FileSystemObject
        Dim obj_Carpeta   'As Scripting.Folder
        Dim obj_Fichero   'As Scripting.File
        Dim bol_Borrar    'As Boolean
        Dim byt_Quit      'As Byte
    
        byt_Quit = 0
    
        'Creamos el objeto FileSystemObject
        Set obj_FSO = CreateObject("Scripting.FileSystemObject")
    
        'Comprobamos que la ruta recibida sea válida
        If not obj_FSO.FolderExists(str_Ruta) Then
    
            WScript.Echo "Error 1: La carpeta " & str_Ruta & _
                               " recibida como parámetro /C no existe."
            Set obj_FSO = Nothing
            byt_Quit = 1
    
        End If
    
        'Comprobamos que la fecha de modificación recibida sea válida
        If Not IsDate(dth_FechaModificacion) Then
    
            WScript.Echo "Error 2: La fecha de modificación " & dth_Fecha & _
                         " recibida como parámetro /M no es una fecha válida."
            Set obj_FSO = Nothing
            byt_Quit = byt_Quit + 2
    
        End If
    
        'Comprobamos que la fecha de acceso recibida sea válida
        If Not IsDate(dth_FechaAcceso) Then
    
            WScript.Echo "Error 4: La fecha de acceso " & dth_Fecha & _
                         " recibida como parámetro /A no es una fecha válida."
            byt_Quit = byt_Quit + 4
    
        End If
        
        'Se si ha producido algún error en los parámetros, se termina
        'el script mostrando la ayuda
        If byt_Quit > 0 Then
        
            Set obj_FSO = Nothing
            Call s_Ayuda
            WScript.Quit byt_Quit
            
        End If
    
        'Obtenemos el objeto carpeta
        Set obj_Carpeta = obj_FSO.GetFolder(str_Ruta)
    
        'Recorremos los ficheros contenidos en la carpeta
        For Each obj_Fichero In obj_Carpeta.Files
    
            If (DateValue(obj_Fichero.DateLastModified) <= _
                                            DateValue(dth_FechaModificacion)) _
            And(DateValue(obj_Fichero.DateLastAccessed) <= _
                                            DateValue(dth_FechaAcceso)) Then
    
                If bol_Inicio Then
                
                    WScript.Echo "Carpeta" & vbTab & _
                                 "Fichero" & vbTab & _
                                 "Tipo" & vbTab & _
                                 "Tamaño" & vbTab & _
                                 "Creado" & vbTab & _
                                 "Modificado" & vbTab & _
                                 "Accedido"
                    bol_Inicio = False
                  
                End If
                'Mostramos la información del fichero por pantalla
                WScript.Echo str_Ruta & vbTab & _
                             obj_Fichero.Name & vbTab & _
                             obj_Fichero.Type & vbTab & _
                             obj_Fichero.Size & vbTab & _
                             obj_Fichero.DateCreated & vbTab & _
                             obj_Fichero.DateLastModified & vbTab & _
                             obj_Fichero.DateLastAccessed
            
            End If
    
        Next
    
        'Si queremos que se recorra todo el subárbol de carpetas...
        If bol_Recursivo Then
    
            'Definimos un objeto para las subcarpetas
            Dim obj_Subcarpeta
    
            'Recorremos las subcarpetas en este bucle
            For Each obj_Subcarpeta In obj_Carpeta.Subfolders
    
                'Llamada recursiva para borrar los ficheros de la
                'subcarpeta
                Call s_ListarFicherosViejos(obj_Subcarpeta.Path, _
                                            dth_FechaModificacion, _
                                      dth_FechaAcceso, bol_Recursivo)
    
            Next
    
            Set obj_Subcarpeta = Nothing   
    
        End If
    
        'Nos limpiamos el culito antes de terminar :-))
        Set obj_Fichero = Nothing
        Set obj_Carpeta = Nothing
        Set obj_FSO = Nothing
    
    End Sub 's_BorrarFicheros
    
    Sub s_Ayuda()
    
        WScript.Echo "Listado de ficheros cuyas fechas de " & _
                     "modificación y de último acceso sean " & _
                     "iguales o anteriores a las fechas " & _
                     "recibidas como los respectivos " & _
                     "parámetros. El listado se hace sobre " & _
                     "una carpeta y se puede realizar de " & _
                     "forma recursiva."
        WScript.Echo ""
        WScript.Echo "Sintaxis"
        WScript.Echo ""
        WScript.Echo "cscript //nologo Listar-FicherosViejos.vbs /C:ruta /M:fecha " & _
                     "/A:fecha [/R]"
        WScript.Echo ""
        WScript.Echo "Siendo"
        WScript.Echo ""
        WScript.Echo "    - C (requerido): ruta de la carpeta a listar. Si tiene e" & _
                     "spacios hay que encerrarla entre comillas."
        WScript.Echo "    - M (requerido): fecha de última modificación en formato" & _
                     " DD/MM/YYYY."
        WScript.Echo "    - A (requerido): fecha de último acceso en formato DD/MM" & _
                     "/YYYY."
        WScript.Echo "    - R  (opcional): si se pasa este modificador se listará " & _
                     "todo el subárbol de carpetas que tiene como carpeta raíz la " & _
                     "pasada como parámetro /C."
        WScript.Echo ""
        WScript.Echo "Ejemplo"
        WScript.Echo ""
        WScript.Echo "cscript //nologo Listar-FicherosViejos.vbs /C:""C:\No borrar" & _
                     """ /M:""24/09/2011"" /A:""24/09/2011"" /R"
    
    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)

    jueves, 6 de octubre de 2011 8:47
    Moderador
  • Wuou, impresionante Fernando, como siempre. Ahora mismo le voy a echar un vistazo, pero tiene muy buena pinta. Al final, mira por donde, al tratarse de un 2003 R2, con el complemente que trae de File Resources, vi que se podian sacar informes, donde ponias una variable que era el tiempo desde el que se accedio por ultima vez. El informe que sacaba estaba genial, con graficos, indicando tamaños, tipo de documentos y rutas.

    No obstante muchisimas gracias por tomarte las molestias,

     

    Saludos,

    jueves, 6 de octubre de 2011 9:22
  • Una pregunta.... éste script lleva el resultado a algún tipo de archivo de salida ??
    martes, 8 de abril de 2014 21:26