El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script VBSCript Que Sirve Para Listar Los Ficheros Y Carpetas En Una Fecha (versión FSO)

Posted by urpiano en Miércoles 13 \13\UTC febrero \13\UTC 2008

Este script permite listar las carpetas y ficheros creados, accesados o modificados por última vez (dependiendo del tipo de fecha pasado como parámetro) en el día de la fecha recibida como parámetro 2 en la ruta recibida como parámetro 1. Los resultados los muestra divididos por tabuladores, lo que permite redireccionarlo a un fichero y abrir éste con Excel (también permite llevar esta salida a un fichero especificado por el parámetro /F).

Este script es ideal para ser ejecutado en el equipo local, debido a su velocidad. Si se necesita ejecutar en un equipo remoto, se puede copiar en dicho equipo remoto y lanzarlo con psexec. Eso, o ejecutar esta otra versión basada en WMI, si bien es muy lenta

Sintaxis

cscript [//nologo] listar-ruta-en-fecha-fso.vbs [/F:fichero] [/T:tipo_fecha] [/?] ruta fecha

Siendo

Etiqueta Dato ¿Requerido? Descripción
  ruta
Ruta de la carpeta en la que se buscarán sus carpetas y fichero creados en la fecha recibida como parámetro
  fecha
Fecha en formato DD/MM/AAAA de la cual se buscarán los ficheros y carpetas creados en ella dentro de la ruta recibida como parámetro 1
F fichero No
Ruta y nombre de fichero en el cual se volcarán los resultados; se trata de un fichero de valores separados por tabuladores. Al nombre recibido se le añadirá la fecha en formato AAAAMMDD y la extensión TSV
T tipo_fecha No
Tipo de fecha que se revisará. Puede ser C (fecha de creación), A (fecha de último acceso) y M (fecha de modificación). Si se omite, se revisará la fecha de creación
?   No
Muestra la ayuda en línea.

Ejemplos:

- Lista los ficheros y carpetas contenidos en “c:gondor” que fueron creados el “24/11/2007″:

cscript //nologo listar-ruta-en-fecha-fso.vbs "c:gondor" "24/11/2007"

- Lista los ficheros y carpetas contenidos en “c:gondor” que fueron creados el “24/11/2007″ y el resultado lo vuelca en el fichero de nombre x:listadosgondor22071124.tsv:

cscript //nologo listar-ruta-en-fecha-fso.vbs /F:x:listadosgondor22071124.tsv "c:gondor" "24/11/2007"

- Lista los ficheros y carpetas contenidos en “c:gondor” a cuya última modificación fue el “24/11/2007″ y el resultado lo vuelca en el fichero de nombre x:listadosgondor22071124.tsv:

cscript //nologo listar-ruta-en-fecha-fso.vbs /F:x:listadosgondor22071124.tsv /T:a "c:gondor" "24/11/2007"

- Lista los ficheros y carpetas contenidos en “c:gondor” a cuyo último acceso fue el “24/11/2007″ y el resultado lo vuelca en el fichero de nombre x:listadosgondor22071124.tsv:

cscript //nologo listar-ruta-en-fecha-fso.vbs /F:x:listadosgondor22071124.tsv /T:a "c:gondor" "24/11/2007"

Este es el código del script

'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'* listar-ruta-en-fecha-fso.vbs                                        *
'*                                                                     *
'* Este script permite listar las carpetas y ficheros creados,         *
'* accesados o modificados por última vez (dependiendo del tipo de     *
'* fecha pasado como parámetro) en el día de la fecha recibida como    *
'* parámetro 2 en la ruta recibida como parámetro 1. Los resultados    *
'* los muestra divididos por tabuladores, lo que permite               *
'* redireccionarlo a un fichero y abrir éste con Excel (también        *
'* permite llevar esta salida a un fichero especificado por el         *
'* parámetro /F).                                                      *
'*                                                                     *
'* Sintaxis                                                            *
'*                                                                     *
'* cscript [//nologo] listar-ruta-en-fecha-fso.vbs [/F:fichero]        *
'* [/T:tipo_fecha] [/?] ruta fecha                                     *
'*                                                                     *
'* Siendo                                                              *
'*                                                                     *
'* - ruta (Requerido):                                                 *
'*         Ruta de la carpeta en la que se buscarán sus carpetas y     *
'*         fichero creados en la fecha recibida como parámetro         *
'*                                                                     *
'* - fecha (Requerido):                                                *
'*         Fecha en formato DD/MM/AAAA de la cual se buscarán los      *
'*         ficheros y carpetas creados en ella dentro de la ruta       *
'*         recibida como parámetro 1                                   *
'*                                                                     *
'* - /F: fichero (Opcional):                                           *
'*         Ruta y nombre de fichero en el cual se volcarán los         *
'*         resultados; se trata de un fichero de valores separados por *
'*         tabuladores. Al nombre recibido se le añadirá la fecha en   *
'*         formato AAAAMMDD y la extensión TSV                         *
'*                                                                     *
'* - /T: tipo_fecha (Opcional):                                        *
'*         Tipo de fecha que se revisará. Puede ser C (fecha de        *
'*         creación), A (fecha de último acceso) y M (fecha de         *
'*         modificación). Si se omite, se revisará la fecha de creación*
'*                                                                     *
'* - /?: ayuda (Opcional):                                             *
'*         Muestra la ayuda en línea                                   *
'*                                                                     *
'*                                                                     *
'* Ejemplos:                                                           *
'*                                                                     *
'* - Lista los ficheros y carpetas contenidos en "c:gondor" que       *
'* fueron creados el "24/11/2007":                                     *
'*                                                                     *
'* cscript //nologo listar-ruta-en-fecha-fso.vbs "c:gondor"           *
'* "24/11/2007"                                                        *
'*                                                                     *
'* - Lista los ficheros y carpetas contenidos en "c:gondor" que       *
'* fueron creados el "24/11/2007" y el resultado lo vuelca en el       *
'* fichero de nombre x:listadosgondor22071124.tsv:                   *
'*                                                                     *
'* cscript //nologo listar-ruta-en-fecha-fso.vbs                       *
'* /F:x:listadosgondor22071124.tsv "c:gondor" "24/11/2007"          *
'*                                                                     *
'* - Lista los ficheros y carpetas contenidos en "c:gondor" a cuya    *
'* última modificación fue el "24/11/2007" y el resultado lo vuelca en *
'* el fichero de nombre x:listadosgondor22071124.tsv:                *
'*                                                                     *
'* cscript //nologo listar-ruta-en-fecha-fso.vbs                       *
'* /F:x:listadosgondor22071124.tsv /T:a "c:gondor" "24/11/2007"     *
'*                                                                     *
'* - Lista los ficheros y carpetas contenidos en "c:gondor" a cuyo    *
'* último acceso fue el "24/11/2007" y el resultado lo vuelca en el    *
'* fichero de nombre x:listadosgondor22071124.tsv:                   *
'*                                                                     *
'* cscript //nologo listar-ruta-en-fecha-fso.vbs                       *
'* /F:x:listadosgondor22071124.tsv /T:a "c:gondor" "24/11/2007"     *
'*                                                                     *
'*                                                                     *
'*                                                                     *
'*                                                                     *
'* © Fernando Reyes                                                    *
'* Febrero De 2008                                                     *
'*°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°*
'*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

'Exigimos la declaración de variables
Option Explicit


Dim str_Error 'As String
Dim int_Error 'As String
Dim str_Ruta 'As String
Dim dth_Fecha 'As Date
Dim str_Fichero 'As String
Dim str_Salida 'As String
Dim str_Tipo 'As String

Dim obj_FS 'As Scripting.FileSystemObject
Dim obj_TS 'As Scripting.TextStream



'Validando los argumentos y almacenando
'sus valores
If f_RevisarArgumentos( _
                       str_Error, _
                       int_Error) Then

    Call s_Ayuda(str_Error)
    WScript.Quit int_Error

End If

'Ponemos los encabezados
str_Salida = "Ruta" & vbTab & _
             "Nombre" & vbTab & _
             "Fecha " & str_Tipo & vbTab & _
             "Hora " & str_Tipo & vbTab & _
             "Carpeta/Fichero"
             
'Si no hay que volcar la información a un fichero,
'la mostramos por pantalla
If Len(str_Fichero) = 0 Then

    WScript.Echo str_Salida
    WScript.Echo "====" & vbTab & _
                 "======" & vbTab & _
                 "======" & String(Len(str_Tipo),"=") & vbTab & _
                 "=====" & String(Len(str_Tipo),"=") & vbTab & _
                 "==============="
    
    'Limpiamos la variable de salida
    str_Salida = ""
    
End If


s_ListarCarpeta str_Ruta,dth_Fecha,str_Tipo

'Si hay que volcar información en el fichero
'de salida de ruta y nombre obj_Salida
If Len(str_Fichero) > 0 Then

    'Creamos un objeto FileSystemObject
    Set obj_FS = CreateObject("Scripting.FileSystemObject")

    'Creamos el fichero de salida
    Set obj_TS = obj_FS.CreateTextFile(str_Fichero)

    'Volcamos la información de salida en el fichero
    obj_TS.Write str_Salida

    'Cerramos el fichero de salida
    obj_TS.Close

    'Limpieza de popa :-)
    Set obj_TS = Nothing
    Set obj_FS = Nothing

End If

Function s_ListarCarpeta(str_Ruta, dth_Fecha, str_Tipo)
'***********************************************************************
'* Procedimiento: s_ListarCarpeta                                      *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 12/02/2008 13:08:02                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Este procedimiento lista las carpetas y los          *
'*                ficheros de la ruta pasada como parámetro,           *
'*                filtrando a aquellos que cumplan con las             *
'*                condiciones de fecha y tipo de fecha (de creación,   *
'*                modificación o último acceso), condiciones pasadas   *
'*                también como parámetros. El procedimiento, por       *
'*                úiltimo, hace una llamada recursiva con cada         *
'*                carpeta contenida, para así desarrollar todo el      *
'*                árbol cuya raíz es la primera carpeta que se pasó    *
'*                como parámetro.                                      *
'***********************************************************************

    Dim obj_FS 'As Scripting.FileSystemObject
    Dim obj_CarpetaBase 'As Scripting.Folder Collection
    Dim obj_Carpeta 'As Scripting.Folder
    Dim col_Ficheros 'As Scripting.File Collection
    Dim obj_Fichero 'As Scripting.File
    Dim str_Fecha 'As String
    Dim str_Hora 'As String
    
    'Creamos un objeto FileSystemObject
    Set obj_FS = CreateObject("Scripting.FileSystemObject")
    
    'Cargamos la carpeta recibida como parámetro
    Set obj_CarpetaBase = obj_FS.GetFolder(str_Ruta)
    
    'Listamos los ficheros que contiene
    For Each obj_Fichero In obj_CarpetaBase.Files
    
        'Obtenemos la fecha y hora del fichero
        str_Fecha = FormatDateTime(f_FechaCF(obj_Fichero,str_Tipo), _
                                    vbShortDate)
        str_Hora = FormatDateTime(f_FechaCF(obj_Fichero,str_Tipo), _
                                    vbShortTime)
    
         'Si la fecha es la recibida como parámetro
         If str_Fecha = dth_Fecha Then
        
            'Guardamos la información
            str_Salida = str_Salida & vbCrLf & _
                         obj_Fichero.ParentFolder.Path & vbTab & _
                         obj_Fichero.Name & vbTab & _
                         str_Fecha & vbTab & _
                         str_Hora & vbTab & _
                         "Fichero"
                         
            'Si no hay que volcar la información a un fichero,
            'la mostramos por pantalla
            If Len(str_Fichero) = 0 Then
        
                WScript.Echo str_Salida
                
                'Limpiamos la variable de salida
                str_Salida = ""
                
            End If
                         
        End If
    
    Next 'obj_Fichero

    'Listamos ahora las subcarpetas
    For Each obj_Carpeta In obj_CarpetaBase.SubFolders
    
        'Obtenemos la fecha y hora del fichero
        str_Fecha = FormatDateTime(f_FechaCF(obj_Carpeta,str_tipo), _
                                    vbShortDate)
        str_Hora = FormatDateTime(f_FechaCF(obj_Carpeta,str_tipo), _
                                    vbShortTime)
        
        'Si la fecha es igual a la recibida como parámetro
        If str_Fecha = dth_Fecha Then
        
            'Guardamos los datos
            str_Salida = str_Salida & vbCrLf & _
                         obj_Carpeta.ParentFolder.Path & vbTab & _
                         obj_Carpeta.Name & "" & vbTab & _
                         str_Fecha & vbTab & _
                         str_Hora & vbTab & _
                         "Carpeta"

            'Si no hay que volcar la información a un fichero,
            'la mostramos por pantalla
            If Len(str_Fichero) = 0 Then
        
                WScript.Echo str_Salida
                
                'Limpiamos la variable de salida
                str_Salida = ""
                
            End If
                   
                         
        End If
        
        'Hacemos una llamada recursiva sobre la subcarpeta, para que
        'se pueda desarrollar todo el árbol
        Call s_ListarCarpeta(obj_Carpeta.Path, dth_Fecha, str_Tipo)
        
    Next 'obj_Carpeta
    
    'Limpieza de culito :-)
    Set obj_FS = Nothing
    Set obj_Carpeta = Nothing
    Set obj_Fichero = Nothing
    Set obj_CarpetaBase = Nothing
    

End Function 's_ListarCarpeta

Function f_RevisarArgumentos( _
                             str_Error, _
                             int_Error _
                             ) 'As Boolean
'***********************************************************************
'* Procedimiento: f_RevisarArgumentos                                  *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 12/02/2008 13:02:25                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función revisa los argumentos recibidos,        *
'*                recogiendo los posibles fallos por falta de          *
'*                argumentos requeridos y almacenando en las           *
'*                variables correspondientes los argumentos            *
'*                recibidos. recibe dos parámetros cuyo fin es ser de  *
'*                salida: una cadena que almacenará los errores        *
'*                detectados y un entero que almacenará el código de   *
'*                los errores detectados. Hay tres tipos de error;     *
'*                error 1 para los argumentos sin nombre requeridos y  *
'*                no encontrados, error 2 para los argumentos con      *
'*                nombre requeridos y no encontrados, por último,      *
'*                error 4 para los combos de argumentos opcionales     *
'*                (un combo de argumentos opcionales es aquel          *
'*                conjunto de argumentos opcionales que es requerido   *
'*                que se pase al menos uno de ellos y que si se pasa   *
'*                más de uno se ignorarán aquellos que estén detrás    *
'*                en la prioridad entre ellos; una característica      *
'*                clara de lo que es un combo de argumentos es cuando  *
'*                dos omás argumentos almacenan su valor en la misma   *
'*                variable). En el caso de producirse más de un tipo   *
'*                de error, el número de error será la suma de ambos   *
'*                de los errores recibidos, es decir 3, 5 o 6          *
'***********************************************************************

    Dim bol_Devolucion 'As Boolean
    Dim bol_Error1 'As Boolean
    Dim bol_Error2 'As Boolean
    Dim bol_Error4 'As Boolean

    'Iniciamos los indicadores
    bol_Devolucion = False
    bol_Error1 = False
    bol_Error2 = False
    bol_Error4 = False


    'Si hay que mostrar la ayuda, se muestra y
    'termina el script
    If WScript.Arguments.Named.Exists("?") Then

        Call s_Ayuda("******************" & vbCrLf & _
                     "*     AYUDA      *" & vbCrLf & _
                     "******************")

        WScript.Quit 0

    End If

    'Revisamos si están todos los argumentos
    'sin nombre requeridos
    If WScript.Arguments.Unnamed.Count < 2 Then

        str_Error = "Error 1, falta/n argumento/s sin " & _
                    "nombre requerido/s"
        bol_Error1 = True

    Else

    'Guardamos los argumentos en las variables
    'correspondientes
        If _
          WScript.Arguments.Unnamed.Count - 1 _
          >= 0 Then _
               str_Ruta = _
                       WScript.Arguments.Unnamed(0)

        If _
          WScript.Arguments.Unnamed.Count - 1 _
          >= 1 Then _
               dth_Fecha = _
                       WScript.Arguments.Unnamed(1)


    End If

    'Revisamos que esté el argumento
    '/F (fichero)
    If WScript.Arguments.Named.Exists("F") Then

        str_Fichero =  _
                       WScript.Arguments.Named("F") & _
                       Year(Date) & _
                       Right("00" & Month(Date), 2) & _
                       Right("00" & Day(Date), 2) & _
                       ".tsv"

    End If

    'Revisamos que esté el argumento
    '/T (tipo_fecha)
    If WScript.Arguments.Named.Exists("T") Then

        If LCase(WScript.Arguments.Named("T")) = "a" Then
        
            str_Tipo = "Accedido"
            
        ElseIf LCase(WScript.Arguments.Named("T")) = "m" Then

            str_Tipo = "Modificado"
            
        Else
        
            str_Tipo = "Creado"
            
        End If
        
    Else
        
        str_Tipo = "Creado"       

    End If

    'Preparamos las variables de devolucion:
    'el entero como suma de los posibles errores 1, 2 y 4
    int_Error = Abs(bol_Error1) + _
                (2 * Abs(bol_Error2)) + _
                (4 * Abs(bol_Error4))
    'La devolucion de la función será True en caso de
    'haber alguno de los errores
    bol_Devolucion = (bol_Error1 Or bol_Error2 Or bol_Error4)

    'Hacemos la devolución de la función
    f_RevisarArgumentos = bol_Devolucion

End Function 'f_RevisarArgumentos

Sub s_Ayuda(str_Error)
'***********************************************************************
'* Procedimiento: s_Ayuda                                              *
'* Tipo         : Sub                                                  *
'* Devolución   :                                                      *
'* Fecha y Hora : 12/02/2008 13:02:26                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Este procedimiento muestra la ayuda en línea.        *
'*                Recibe un parámetro de tipo cadena que si viene      *
'*                será mostrado antes de la línea; pensado para que    *
'*                se muestre un error que se haya detectado.           *
'***********************************************************************

    'Si hay que mostrar algún texto previo a la ayuda, lo hacemos
    If Len(str_Error) > 0 Then

        WScript.Echo str_Error & vbCrLf & vbCrLf

    End If

    'A continuación, mostramos la ayuda por pantalla
    WScript.Echo "Este script permite listar las carpetas y fichero" & _
                 "s creados, accesados o"
    WScript.Echo "modificados por última vez (dependiendo del tipo " & _
                 "de fecha pasado como"
    WScript.Echo "parámetro) en el día de la fecha recibida como pa" & _
                 "rámetro 2 en la ruta recibida"
    WScript.Echo "como parámetro 1. Los resultados los muestra divi" & _
                 "didos por tabuladores, lo que"
    WScript.Echo "permite redireccionarlo a un fichero y abrir éste" & _
                 " con Excel (también permite"
    WScript.Echo "llevar esta salida a un fichero especificado por " & _
                 "el parámetro /F)."
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "cscript [//nologo] listar-ruta-en-fecha-fso.vbs [" & _
                 "/F:fichero] [/T:tipo_fecha]"
    WScript.Echo "[/?] ruta fecha"
    WScript.Echo ""
    WScript.Echo "Siendo"
    WScript.Echo ""
    WScript.Echo "- ruta (Requerido):"
    WScript.Echo "Ruta de la carpeta en la que se buscarán sus carp" & _
                 "etas y fichero"
    WScript.Echo "creados en la fecha recibida como parámetro"
    WScript.Echo ""
    WScript.Echo "- fecha (Requerido):"
    WScript.Echo "Fecha en formato DD/MM/AAAA de la cual se buscará" & _
                 "n los ficheros"
    WScript.Echo "y carpetas creados en ella dentro de la ruta reci" & _
                 "bida como"
    WScript.Echo "parámetro 1"
    WScript.Echo ""
    WScript.Echo "- /F: fichero (Opcional):"
    WScript.Echo "Ruta y nombre de fichero en el cual se volcarán l" & _
                 "os resultados;"
    WScript.Echo "se trata de un fichero de valores separados por t" & _
                 "abuladores. Al"
    WScript.Echo "nombre recibido se le añadirá la fecha en formato" & _
                 " AAAAMMDD y la"
    WScript.Echo "extensión TSV"
    WScript.Echo ""
    WScript.Echo "- /T: tipo_fecha (Opcional):"
    WScript.Echo "Tipo de fecha que se revisará. Puede ser C (fecha" & _
                 " de creación),"
    WScript.Echo "A (fecha de último acceso) y M (fecha de modifica" & _
                 "ción). Si se"
    WScript.Echo "omite, se revisará la fecha de creación"
    WScript.Echo ""
    WScript.Echo "- /?: ayuda (Opcional):"
    WScript.Echo "Muestra la ayuda en línea"
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo "Ejemplos:"
    WScript.Echo ""
    WScript.Echo "- Lista los ficheros y carpetas contenidos en ""c" & _
                 ":gondor"" que fueron creados el"
    WScript.Echo """24/11/2007"":"
    WScript.Echo ""
    WScript.Echo "cscript //nologo listar-ruta-en-fecha-fso.vbs ""c" & _
                 ":gondor"" ""24/11/2007"""
    WScript.Echo ""
    WScript.Echo "- Lista los ficheros y carpetas contenidos en ""c" & _
                 ":gondor"" que fueron creados el"
    WScript.Echo """24/11/2007"" y el resultado lo vuelca en el fic" & _
                 "hero de nombre"
    WScript.Echo "x:listadosgondor22071124.tsv:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo listar-ruta-en-fecha-fso.vbs /F:" & _
                 "x:listadosgondor22071124.tsv"
    WScript.Echo """c:gondor"" ""24/11/2007"""
    WScript.Echo ""
    WScript.Echo "- Lista los ficheros y carpetas contenidos en ""c" & _
                 ":gondor"" a cuya última"
    WScript.Echo "modificación fue el ""24/11/2007"" y el resultado" & _
                 " lo vuelca en el fichero de"
    WScript.Echo "nombre x:listadosgondor22071124.tsv:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo listar-ruta-en-fecha-fso.vbs /F:" & _
                 "x:listadosgondor22071124.tsv"
    WScript.Echo "/T:a ""c:gondor"" ""24/11/2007"""
    WScript.Echo ""
    WScript.Echo "- Lista los ficheros y carpetas contenidos en ""c" & _
                 ":gondor"" a cuyo último acceso"
    WScript.Echo "fue el ""24/11/2007"" y el resultado lo vuelca en" & _
                 " el fichero de nombre"
    WScript.Echo "x:listadosgondor22071124.tsv:"
    WScript.Echo ""
    WScript.Echo "cscript //nologo listar-ruta-en-fecha-fso.vbs /F:" & _
                 "x:listadosgondor22071124.tsv"
    WScript.Echo "/T:a ""c:gondor"" ""24/11/2007"""
    WScript.Echo ""
    WScript.Echo ""
    WScript.Echo ""

End Sub 's_Ayuda

Function f_ServicioWMI(obj_ServicioWMI, str_Usuario, _
                       str_Clave, str_Equipo, _
                       str_Espacio)
'***********************************************************************
'* Procedimiento: f_ServicioWMI                                        *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : May 2007                                             *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función permite conectar con el servicio WMI    *
'*                de un equipo. La conexión puede ser realizada        *
'*                directamente por el usuario que ha lanzado el        *
'*                script o por otro usuario cuyas credenciales son     *
'*                recibidas como parámetros. La función recibe como    *
'*                parámetro un objeto que será utilizado como          *
'*                parámetro de salida, siendo creado por la función    *
'*                como objeto de servicio WMI del equipo recibido      *
'*                como parámetro. Si recibe usuario, contraseña y      *
'*                nombre de equipo a conectar, conectará con ése       *
'*                equipo con las credenciales pasadas, siempre y       *
'*                cuando no se trate del equipo local, en cuyo caso    *
'*                no se conectará con credenciales alternativas si no  *
'*                con el usuario que lanza el script. Si está vacío    *
'*                el parámetro str_Espacio, se conectará con el        *
'*                espacio de nombres rootCIMV2, en caso contrario     *
'*                con el espacio pasado.                               *
'***********************************************************************

    Dim obj_LocalizadorWMI
    Dim lng_Respuesta

    If Len(str_Espacio) = 0 Then str_Espacio = "rootCIMV2"

    'Si hemos recibido nombre de usuario, debemos conectar
    'al servicio WMI del equipo como el usuario
    'recibido. en el caso de que se trate del equipo local
    'ignoramos las credenciales alternativas
    If Len(str_Usuario) > 0 _
    And Not f_EquipoLocal(str_Equipo) Then

        'Para poder especificar unas credenciales alternativas,
        'debemos crear primero un localizador WMI
        Set obj_LocalizadorWMI = CreateObject( _
                                  "WbemScripting.SWbemLocator")

        'Establecemos control de errores
        On Error Resume Next

        'Conectamos con el servicio WMI del equipo con las
        'credenciales pasadas
        Set obj_ServicioWMI = obj_LocalizadorWMI.ConnectServer( _
                                       str_Equipo, str_Espacio, _
                                       str_Usuario, str_Clave)

        'Si se ha producido algún error...
        If Err.Number <> 0 Then

            'Lo primero es vaciar la variable con el localizador WMI
            Set obj_LocalizadorWMI = Nothing

            'Mostramos el error
            WScript.Echo vbCrLf & vbCrLf & _
                         Err.Number & ": " & Err.Description

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function

        End If

    Else

        'Podemos conectar directamente con el servicio WMI del
        'equipo sin necesidad de utilizar el localizador WMI
        'ya que no hay que hacerlo con otras credenciales
        'distintas a las del usuario que lanza el script
        Set obj_ServicioWMI = GetObject("winmgmts:\" & _
                                    str_Equipo & "" & _
                                    str_Espacio)

        'si se ha producido algún error...
        If Err.Number <> 0 Then

            'Mostramos el error
            WScript.Echo Err.Number & ": " & Err.Description & _
                         vbCrLf & vbCrLf

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function

        End If

    End If

    'No se han producido errores, devolvemos True
    f_ServicioWMI = True

    'Limpieza de culito :-)
    Set obj_LocalizadorWMI = Nothing

End Function 'f_ServicioWMI


Function f_EquipoLocal(str_Equipo)
'***********************************************************************
'* Procedimiento: f_EquipoLocal                                        *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : May 2007                                             *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe un nombre de equipo y comprueba  *
'*                si se trata del equipo local o de uno remoto. Si es  *
'*                el equipo local devuelve True, si es remoto False.   *
'*                De paso, si como nombre de equipo local recibió "."  *
'*                cambiará en la variable recibida al nombre           *
'*                verdadero del equipo                                 *
'***********************************************************************

    Dim obj_SH, str_EquipoEntorno

    f_EquipoLocal = False

    'Creamos un objeto WshShell
    Set obj_SH = CreateObject("WScript.Shell")

    'Obtenemos el valor de la variable de entorno con
    'el nombre de equipo
    str_EquipoEntorno = UCase( _
       obj_SH.ExpandEnvironmentStrings("%COMPUTERNAME%"))

    'Si está vacío el nombre de equipo, o es ".",
    'se trata del equipo local; lo asignamos a la
    'variable
    If Len(str_Equipo) = 0 _
    Or str_Equipo = "." Then


        str_Equipo = str_EquipoEntorno
        f_EquipoLocal = True

    'Ahora revisamos no se haya pasado el FQDN del equipo
    'local o su nombre NetBios
    ElseIf _
        ( _
        Len(str_Equipo) > Len(str_EquipoEntorno) _
        And UCase(Left(str_Equipo, Len(str_EquipoEntorno))) = _
                      UCase(str_EquipoEntorno) _
        And Mid(str_Equipo, Len(str_EquipoEntorno) + 1, 1) = _
                      "." _
        ) _
    Or UCase(str_Equipo) = UCase(str_EquipoEntorno) Then

            str_Equipo = str_EquipoEntorno
            f_EquipoLocal = True

    End If

End Function 'f_EquipoLocal


Function f_EntrarClave(str_HTML)
'***********************************************************************
'* Procedimiento: f_EntrarClave                                        *
'* Tipo         : Función                                              *
'* Devolución   : Cadena                                               *
'* Fecha y Hora : May 2007                                             *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : El propósito de esta función es el proveer al        *
'*                usuario de una caja de texto en la que teclear una   *
'*                contraseña sin revelarla, pues la caja de texto es   *
'*                de tipo password. Para ello se crea una página web   *
'*                que es cargada en un Internet Explorer y se recoge   *
'*                de éste la contraseña tecleada y se convierte en la  *
'*                devolucion de la función. La ruta y nombre de la     *
'*                página es recibida como parámetro por la función,    *
'*                lo que permite reutilizar esta función en más        *
'*                scripts y personalizar la página para cada script,   *
'*                lo único que debe ser igual en todas las páginas     *
'*                que se quieran utilizar es que el botón debe         *
'*                llamarse Aceptar, el control oculto AceptarPulsado   *
'*                y la caja de texto Clave.                            *
'*                                                                     *
'*                Esta función está basada en:                         *
'*http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_lppm.msp
'*x?mfr=true
'*                                                                     *
'*                En el ejemplo de TechNet se pone una ruta local      *
'*                (c:carpetafichero.asp) para la ubicación del       *
'*                fichero. Esto no es correcto cuando estamos de XP    *
'*                SP2 en adelante, pues la navegación segura           *
'*                interfiere con el script, ya que contiene un script  *
'*                VBScript. Para evitar esto, yo lo que hago es        *
'*                situar el fichero en una carpeta compartida y        *
'*                acceder a él con su ruta UNC; de esta manera es      *
'*                tratado como de la zona de intranet y no hay         *
'*                problemas. También se podría colocar en un servidor  *
'*                Web que fuese de la intranet o de los sitios de      *
'*                confianza y referirse a él por su ruta http; la      *
'*                mejor opción de todas sería situarlo en un servidor  *
'*                web seguro, y poner su ruta https, de esa manera     *
'*                eludimos a alguien que esté usando un sniffer        *
'*                                                                     *
'*                El código de la página puede ser tan simple como:    *
'*                <html>                                               *
'*                <script language="VBScript">                         *
'*                <!--                                                 *
'*                Sub Aceptar_OnClick()                                *
'*                                                                     *
'*                AceptarPulsado.Value = "Pulsado"                     *
'*                                                                     *
'*                End Sub                                              *
'*                -->                                                  *
'*                </script>                                            *
'*                <body>                                               *
'*                Entre la contraseña del usuario con el que se        *
'*                conectará al servicioWMI del equipo:                 *
'*                <input type="password" name ="Clave" size="20">      *
'*                <p><input name="Aceptar" type="button"               *
'*                value="Aceptar" ></p>                                *
'*                <p><input type="hidden" name="AceptarPulsado"        *
'*                size="20"></p>                                       *
'*                </body></html>                                       *
'***********************************************************************

    'Declaramos variables
    Dim obj_IE

    'Creamos un objeto Internet Explorer
    Set obj_IE = WScript.CreateObject _
              ("InternetExplorer.Application", "IE_")

    'Cargamos el navegador con la página recibida como parámetro
    obj_IE.Navigate str_HTML

    'Con este bucle esperamos a que la página esté completamente cargada
    Do

        WScript.Sleep 10

    Loop Until obj_IE.ReadyState = 4

    'Establecemos propiedades del navegador
    obj_IE.Toolbar = 0
    obj_IE.StatusBar = 0
    obj_IE.Width = 400
    obj_IE.Height = 250
    obj_IE.Left = 0
    obj_IE.Top = 0
    obj_IE.Visible = 1

    'En este bucle esperamos a que se haya pulsado el botón
    '"Aceptar"
    Do While (obj_IE.Document.All.AceptarPulsado.Value = "")

        WScript.Sleep 250

    Loop

    'Recogemos la contraseña entrada
    str_Clave = obj_IE.Document.All.Clave.Value

    'Cerramos el navegador
    obj_IE.Quit

    'Esperamos a que esté cerrado
    WScript.Sleep 250

    'Establecemos la contraseña como devolución de la función
    f_EntrarClave = str_Clave

    'Limpiadita de culito :-)
    Set obj_IE = Nothing

End Function      'f_EntrarClave

Function f_EquipoResponde(str_Equipo) 'As Boolean
'***********************************************************************
'* Procedimiento: f_EquipoResponde                                     *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : May 2007                                             *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe un nombre de equipo (ya sea      *
'*                nombre en sí o IP) y, por medio de PING, revisa si   *
'*                el equipo responde o no                              *
'***********************************************************************

    'Objeto shell para ejecutar ping y
    'enviar la salida a un fichero temporal
    Dim obj_Shell 'As Object
    'Objeto FileSystem para abrir y borrar
    'el fichero temporal
    Dim obj_FileSystem 'As Object
    'Objeto TextStream para leer el fichero
    'temporal
    Dim obj_Fichero 'As Object
    'Se volcará en esta variable el
    'contenido del fichero temporal
    Dim str_ContenidoFichero 'As String
    'Sirve para establecer la ruta y
    'nombre del fichero temporal
    Dim str_FicheroTemporal 'As String

    'Creamos los objetos FileSystem y Shell
    Set obj_Shell = CreateObject("WScript.Shell")
    Set obj_FileSystem = CreateObject("Scripting.FileSystemObject")

    'Establecemos el fichero temporal en la ruta
    'de este libro de Excel y con el nombre
    '"temp.txt"
    str_FicheroTemporal = _
             obj_Shell.ExpandEnvironmentStrings( _
                                 "%TEMP%temp.txt")

    'Ejecutamos el ping volcando la salida en el
    'fichero temporal. Sólo esperaremos un eco ("-n 1")
    obj_Shell.Run "cmd /c ping -n 1 " & str_Equipo & " > """ & _
                  str_FicheroTemporal & """", 0, True

    'Abrimos el fichero temporal sobre el objeto fichero
    Set obj_Fichero = obj_FileSystem.OpenTextFile( _
                              str_FicheroTemporal, 1, False)

    'Volcamos el contenido del fichero temporal
    'en str_ContenidoFichero
    str_ContenidoFichero = obj_Fichero.ReadAll

    'Cerramos el fichero temporal y vaciamos su variable
    obj_Fichero.Close
    Set obj_Fichero = Nothing

    'Borramos el fichero temporal y vaciamos
    'los objetos Shell y FileSystem
    obj_FileSystem.DeleteFile (str_FicheroTemporal)
    Set obj_FileSystem = Nothing
    Set obj_Shell = Nothing

    'Si encontramos la cadena "TTL=" significa
    'que el equipo respondió y por tanto la función
    'devuelve True, en caso contrario significa que
    'no respondió el equipo y por tanto devuelve
    'False
    If InStr(str_ContenidoFichero, "TTL=") > 0 Then
        f_EquipoResponde = True
    Else
        f_EquipoResponde = False
    End If

End Function 'f_EquipoResponde

Function f_FechaCF(obj_CF, str_Tipo)
'***********************************************************************
'* Procedimiento: f_FechaCF                                            *
'* Tipo         : Función                                              *
'* Devolución   : Booleana                                             *
'* Fecha y Hora : 12/02/2008 17:39:04                                  *
'* Autor        : Fernando Reyes                                       *
'*¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*
'* Propósito    : Esta función recibe un objeto carpeta o fichero y    *
'*                una indicación de cuál de las tres propiedades de    *
'*                fecha se quiere que devuelva: DateCreated,           *
'*                DateLastAccesed o DateLastModified.                  *
'***********************************************************************

    Select Case str_Tipo
    
        Case "Accedido"
        
            f_FechaCF = obj_CF.DateLastAccessed
        
        Case "Modificado"
        
            f_FechaCF = obj_CF.DateLastModified
        
        Case "Creado"
        
            f_FechaCF = obj_CF.DateCreated
        
    End Select


End Function 'f_FechaCF

 

 

About these ads

7 comentarios to “Script VBSCript Que Sirve Para Listar Los Ficheros Y Carpetas En Una Fecha (versión FSO)”

  1. […] Script VBSCript Que Sirve Para Listar Los Ficheros Y Carpetas En Una Fecha (versión FSO) […]

  2. Thanks for all your efforts that you have put in this.
    very interesting info . “If a man writes a book, let him set down only what he knows. I have guesses enough of my own.” by Johann Wolfgang von Goethe.

  3. Improving upon and stimulating creation of the connective tissue cells may possibly protect
    against pores and skin from tearing and consequently stay
    away from the development of stretch marks since collagen
    and elastin are accountable for pores and skin overall flexibility.
    The item should really be in a position to secure the skin for the duration of mechanical stretching and it
    need to also aid in cutting down pores and skin irritation.
    Of program the best way to offer with extend marks is to check out and stop
    them in the first spot.

  4. I like this site its a master peace ! Glad I noticed this on
    google. “The definition of a beautiful woman is one who loves me.” by Sloan Wilson.

  5. A diet regime encouraging sluggish weight loss will lower trauma to
    the skin and allow for the pores and skin to far better modify to the
    excess weight improvements. There can be several diverse factors
    for stretch marks. – There is some negative comments from consumers stating that it
    does not operate.

  6. Really superb information can be found on site .

  7. Andrés Ochoa said

    Muchas gracias por el script,

    Tengo una pregunta respecto a la fecha, la fecha que yo ingrese el solo busca los archivos accesados en esa fecha o en fechas anteriores a la que lo le indique, es decir, si yo pongo como fecha 24/03/2014 el busca los archivos que fueron accesados ese día solamente o los días anteriores a esa fecha?

    puntualmente necesito que el script, haga un inventario de todas las carpetas y archivos, inventariandolos y además indicando cuando fue la última fecha de último acceso, la fecha de creación y la fecha de modificación tabulados.

    saludos cordiales,

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 42 seguidores

A %d blogueros les gusta esto: