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 Para Listar Los Ficheros De Una Unidad Y Volcarlos En Un Fichero De Nombre La Etiqueta De La Unidad

Posted by urpiano en Domingo 10 \10\UTC diciembre \10\UTC 2006

Este script nos permite listar todos los ficheros contenidos en un volumen y que el resultado del listado se vuelque en un fichero. Se basa en la instrucción Dir con los modificadores /S (recursivo) y /B (formato simple: sin encabezados, tamaños de fichero ni resumen). El listado se vuelca en un fichero de nombre la etiqueta del volumen y de ruta la recibida como parámetro; en el caso de que la etiqueta del volumen estuviese vacía, el fichero tendrá de nombre el número de serie del volumen.

Para su uso, debemos copiar el código, pegarlo en el bloc de notas y guardarlo como lista-volumen.vbs. Para lanzarlo deberemos poner:

cscript //nologo lista-volumen.vbs unidad ruta

Siendo:

  • unidad: La unidad que queremos listar
  • ruta: ruta completa a la carpeta donde queremos guardar el fichero con el listado. En el caso de que contenga espacios, deberemos encerrarla entre comillas.

Ejemplos:

cscript //nologo lista-volumen.vbs d: c:Listados

cscript //nologo lista-volumen.vbs f: "d:Listados de unidades"

'Este Script nos permite realizar un listado recursivo de la
'unidad recibida como primer parámetro. El listado se guardará
'en un fichero de ruta la recibida como segundo parámetro y
'de nombre la etiqueta del volumen; si el volumen no tiene
'etiqueta el nombre será su número de serie.
'
'© Fernando Reyes - 12/2006

Option Explicit

Dim str_Equipo
Dim str_Unidad
Dim str_Ruta
Dim obj_ServicioWMI
Dim col_Discos
Dim obj_Disco
Dim str_Volumen

'Revisamos que hayamos recibido el número correcto de parámetros
If Not WScript.Arguments.Count = 2 Then

    WScript.Echo "Número de parámetros incorrectos." & vbCRLf
    WScript.Echo "lista-volumne.vbs: Script VBScript que hace un " & _
                 "listado recursivo de una unidad recibida como " & _
                 "parámetro y lo vuelca en un fichero de nombre la " & _
                 "etiqueta de la unidad (si está en blanco su número " & _
                 "de serie) y de ruta la recibida como segundo " & _
                 "parámetro. La sintaxis es:" & vbCrLf
          
    WScript.Echo "cscript //nologo lista-volumen.vbs <unidad> <ruta>" & _
                  vbCrLf
    WScript.Echo "Siendo:" & vbCrLf
    Wscript.Echo "<unidad>: La unidad que queremos listar"
    WScript.Echo "<ruta>: La ruta donde se generará el fichero con " & _
                 "el listado."
    WScript.Echo vbCrLf & "Ejemplo: " & vbCrLf
    WScript.Echo "cscript //nologo lista-volumen.vbs F: " & _
                  """C:Listado de Unidades"""

    WScript.Quit 1

End If

'Establecemos el equipo local
str_Equipo = "."

'Recogemos los parámetros de unidad y ruta
str_Unidad = WScript.Arguments(0)
str_Ruta = WScript.Arguments(1)

'Nos aseguramos de que la ruta termine en slash invertido
If Not Right(str_Ruta,1) = "" Then str_Ruta = str_Ruta & ""

'Creamos un objeto servicio WMI
Set obj_ServicioWMI = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & str_Equipo & "rootcimv2")

'Cargamos una colección de discos con los resultantes de la búsqueda
'En este caso, la colección solo contendrá el disco indicado como parámetro
Set col_Discos = obj_ServicioWMI.ExecQuery _
    ("Select * from Win32_LogicalDisk Where Name='" & str_Unidad & "'")

'Recorremos la colección de discos
For each obj_Disco in col_Discos

    'Obtenemos la etiqueta del disco (igual que si desde una
    'ventana de comandos ejecutasemos "VOL [unidad:]")
    str_Volumen = obj_Disco.VolumeName

    'Si el volumen no tiene etiqueta, usaremos su número de serie
    If Len(str_Volumen) = 0 Then

        str_Volumen = obj_Disco.VolumeSerialNumber

    End If
 
Next

'Realizamos el dir recursivo sobre la unidad volcandolo en un fichero txt
'de nombre el volumen
Call s_Cmd("Dir /B /S " & str_Unidad & ">" & str_Ruta & str_Volumen & ".txt")

'Nos limpiamos el culito :-)
Set obj_Disco = Nothing
Set col_Discos = Nothing
Set obj_ServicioWMI = Nothing

Sub s_Cmd(str_Comando)
'*****************Descripción********************************
'Esta rutina lanza el comando recibido como parámetro como
'si desde una ventana de comandos fuese lanzado. 
'*****************Fin de la descripción**********************

    Dim str_Shell 'Alberga la cadena que permite lanzar
                  'la ventana de comandos predeterminada
                  '(COMSPEC)
    Dim obj_Shell 'Contiene un objeto wshShell


    'Creamos un objeto Shell
    Set obj_Shell = CreateObject("Wscript.Shell")

    'Obtenemos la cadena que lanza la ventana de comandos
    'predeterminada
    str_Shell = obj_Shell.Environment("Process").Item("COMSPEC")

    'Lanzamos el comando por medio de una llamada al método Run
    'del objeto Shell
    obj_Shell.Run str_Shell & " /c """ & str_Comando & """", 0, True

    'Nos limpiamos el culito :-)
    Set obj_Shell = Nothing

End Sub

6 comentarios to “Script VBScript Para Listar Los Ficheros De Una Unidad Y Volcarlos En Un Fichero De Nombre La Etiqueta De La Unidad”

  1. Erick said

    Hola, hice un script similar para usarlo en internet explorer, muy simple, solo necesitaba ejecutar un archivo que estaba en una unidad de mi pc, pero a pesar que la sintaxis es correcta, el problema parece ser los espacios en blancos de la ruta y a pesar que esta entre comillas, siempre me sale el mensaje que no pudo encontrar el archivo especificado, podrian darme una solucion por favor?

  2. urpiano said

    Habría que ver cómo llamas al fichero. podría ser que necesites cambiar la sintaxis de la ruta:

    c:\carpeta con espacios\fichero.htm

    podrías probar a ponerlo como:

    file:///c|/carpeta%20con%20espacios/fichero.htm

    pero claro, esto puede no responder a lo que buscas ¿puedes poner el código donde llamas al fichero?

  3. Erick said

    Hola, claro, comparto mi codigo

    Public Sub EjecutaEnCliente(ByVal strApp As String)
    ‘StrApp es la ruta de la applicacion o fichero q quiero abrir
    Dim strScript As String
    Try
    strScript = “” + _
    vbNewLine + “Dim objTemp” + vbNewLine + “set objTemp = CreateObject(“”WScript.Shell””)” + _
    vbNewLine + “on Error Resume Next” + vbNewLine + _
    vbNewLine + “objTemp.Run “”” + strApp + “””,1,False ” + vbNewLine + “set objTemp = Nothing” + _
    vbNewLine + “if Len(Err.Drescription) > 0 then” + _
    vbNewLine + “window.alert(Err.Description)” + vbNewLine + _
    vbNewLine + “end if” + _
    vbNewLine + “”
    If Not ClientScript.IsStartupScriptRegistered(“RunExe”) Then
    ClientScript.RegisterStartupScript(Page.GetType, “RunExe”, strScript)
    End If
    Catch ex As Exception
    Log(“Exepcion en EjecutaEnCliente: ” + ex.Message)
    End Try
    End Sub

    Gracias por responder, Saludos

  4. urpiano said

    “if Len(Err.Drescription)” está mal, debe ser “if Len(Err.Description)”. De todas maneras ¿no sería mejor revisar el código del script generado para ver si hay algo raro en él? Esto que pones es el código que genera el script.

  5. Luciano said

    Hola, una consulta con respecto al primer codigo, esuve tratando de modificarlo para que liste sólo un determinado tipo de extensión y no funciona. Me lista TODOS los archivos como si no hubiera modificado nada.

    Lo que hice fue cambiar la linea:

    Call s_Cmd(“Dir /B /S ” & str_Unidad & “\>” & str_Ruta & str_Volumen & “.txt”)

    Por:

    Call s_Cmd(“Dir /B /S *.txt ” & str_Unidad & “\>” & str_Ruta & str_Volumen & “.txt”)

    Y no me lista sólo los txt, si no TODOS.

    Que estoy haciendo mal?

    Gracias

  6. urpiano said

    Luciano,

    Prueba con:

    Call s_Cmd(“Dir /B /S ” & str_Unidad & “\*.txt>” & str_Ruta & str_Volumen & “.txt”)

Responder

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

 
A %d blogueros les gusta esto: