Ghost Solution Suite

 View Only
Expand all | Collapse all

Ghost32 v11.5 error al chequear integridad si hay carpetas con espacios en blanco

  • 1.  Ghost32 v11.5 error al chequear integridad si hay carpetas con espacios en blanco

    Posted Feb 18, 2015 03:20 AM

    Hola, necesito chequear la integridad de imágenes almacenadas. He creado un programa en Visual Basic que realiza esta función perfectamente. El programa recorre una unidad de disco duro, localiza todas las imágenes y chequea la integridad. El problema existe cuando en el nombre de una carpeta hay espacios en blanco.

    lstfoundfiles.list(n) es una variable tipo string que almacena la ruta completa y el nombre del archivo a chequear.

    Cuando ejecuto el comando:

    Comando = "ghost32.exe -batch -chkimg," & lstFoundFiles.List(n)

    Mi programa devuelve el error:

    ABORT: 19010, Arguments must be preceeded with a '-' or a '/'

    La ruta real del archivo a comprobar es: H:\Ghost\Folder 3\IMOK4.GHO, existe un espacio en blanco entre folder y 3.

    Si pongo directamente:


    Comando = "ghost32.exe -batch -chkimg," & "H:\Ghost\Folder 3\IMOK4.GHO"

    también muestra el mismo error.

    Si yo ejecuto directamente el programa Ghost32 v11.5 , y a través de los menús elijo "comprobar integridad" y selecciono el archivo que está en la carpeta mencionada, entonces sí funciona bien, por lo que deduzco que el problema es que mi comando no está bien montado.


    ¿Cómo debería confeccionar el comando para que funcione correctamente?

    Saludos



  • 2.  RE: Ghost32 v11.5 error al chequear integridad si hay carpetas con espacios en blanco

    Posted Feb 19, 2015 04:01 AM

    Hola, ya he solucionado el problema.

    Ghost32 desde la línea de comandos no sabe interpretar un nombre como D:\Copias imagen\Copia1.GHO, porque en el nombre de la ruta existe un espacio. Ghost32 trabaja con nombres de carpetas cortas, es decir, con el formato de MSDOS. Dicho nombre se componen de 8 caracteres, y en la ruta que nos ocupa sería:

    D;\Copias~1\Copia1.GHO

    Donde vemos que lo que hay que hacer para componer el nombre de la carpeta es tomar los seis primeros caracteres del nombre, añadirle el símbolo de la ñ (ALT 126) y luego un uno. Si hubiera varias carpetas con el mismo nombre inicial, deberían ser:

    D:\Copias~1\, D:\Copias~2\, etc...

    En mi programa, he encontrado una función en Visual Basic que proporciona el nombre corto de la carpeta. Dicha función es:

    -------------------------------------------------------------------------

    Public Function RutaCorta(strRutaLarga As String) As String

    Dim fso As New FileSystemObject
    Dim fArchivo As File
    Set fArchivo = fso.GetFile(strRutaLarga)
    RutaCorta = fArchivo.ShortPath

    End Function

    --------------------------------------------------------------------------

    Y en mi programa he realizado la modificación:

    --------------------------------------------------------------------------
    Dim temporal As String
    Dim RutaCorta as string

    'En lstFoundFiles está la lista de archivos *.GHO encontrados con ruta completa
            

    For n = 0 To narchivos - 1
     
              temporal = RutaCorta(lstFoundFiles.List(n))
            
              Comando = "ghost32.exe -batch -chkimg," & temporal ' Arranca el ghost configurado para chequear imágenes"
            
          errorimagen = ejecutar_Dos(Comando)

          if errorimagen <> "" then txtresultado.text=errorimagen    

    next n    

    ---------------------------------------------------------------------------

    La función para recoger la información que Ghost devuelva cuando realice el chequeo de imagen y así poder tratarla en VB

    Function ejecutar_Dos(Comando As String) As String
        Dim oShell As WshShell
        Dim oExec As WshExec
        Dim ret As String
           
        Set oShell = New WshShell
        DoEvents
           
        ' ejecutar el comando
        Set oExec = oShell.Exec("%comspec% /c " & Comando)
        ret = oExec.StdOut.ReadAll()
            
        ' retornar la salida y devolverla a la función
        ejecutar_Dos = ret ' Replace(ret, Chr(10), vbNewLine)
           
        DoEvents
        Me.SetFocus
    End Function
    ---------------------------------------------------------------------------

    Saludos y espero que esta información pueda ayudar a alguien .