Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: pepeponce en 27 Septiembre 2017, 19:39 pm



Título: Como tener confirmación de copia de archivos vbs
Publicado por: pepeponce en 27 Septiembre 2017, 19:39 pm
Hola he hecho este script para copiar unas carpetas que contienen imágenes.
Mi consulta es como puedo confirmar (mediante comparación o verificando) que las carpetas se han copiado completamente.

Gracias por adelantado.

Código:
[Option Explicit

Dim objArgumentos
Set objArgumentos = WScript.Arguments

If objArgumentos.Count = 0 Then
    MsgBox ("No hay argumentos")
Else
Dim  IP, OF, LOT, MODULO

    IP= objArgumentos.Item(0)
OF= objArgumentos.Item(1)
    LOT= objArgumentos.Item(2)
    MODULO= objArgumentos.Item(3)

Dim Nosecopian
    'Pregunta de fin de lote productivo
    If Msgbox("Fin de lote productivo?", vbYesNo, "Confirmar") = vbNo Then
        'No es fin de lote productivo no realiza ninguna acción
        Nosecopian = MSGBOX ("No se copian las imagenes" & chr(13) & "Se finaliza lote", VBEXCLAMATION, "Aviso")
    Else
Dim nameFolder, dtmValue, ParentFolder
Dim objShell,objFolder,objFSO
        'Adquirimos la hora actual
        Set objFSO = CreateObject("Scripting.FileSystemObject")
dtmValue = Now()
        'Creamos la carpeta de destino
nameFolder = IP & "\" & OF & "_" & LOT & "_" & MODULO & "_" & Year(dtmValue) & "-" & Month(dtmValue) & "-" & Day(dtmValue) & "_" & Hour(dtmValue) & "-" & Minute(dtmValue)
objFSO.CreateFolder(nameFolder)

'Copiamos carpeta
Const FOF_CREATEPROGRESSDLG = &H0&
ParentFolder = (nameFolder)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(ParentFolder)
objFolder.CopyHere "e:\folder\folder\*.*", FOF_CREATEPROGRESSDLG

        'Preguntamos si se borran las imagenes
Set objFSO = CreateObject("scripting.FileSystemObject")
        If Msgbox("Imagenes copiadas correctamente" & chr(13) & "Borrar imagenes?", vbYesNo, "Confirmar") = vbYes Then
           objFSO.deletefolder "e:\folder\folder\*.*"  
        End if
    End if
End if

wscript.Quit(5)]


Título: Re: Como tener confirmación de copia de archivos vbs
Publicado por: Eleкtro en 27 Septiembre 2017, 20:26 pm
Por favor lee las reglas del foro y formatea ese código.



Mi consulta es como puedo confirmar (mediante comparación o verificando) que las carpetas se han copiado completamente.

Añade un control de errores mediante el uso de On Error Resume Next al llamar al método Copy / CopyHere y evalua el valor de la propiedad Err.Number.

Aquí tienes la documentación:
  • Handling Errors in VBScript | docs.microsoft.com (https://docs.microsoft.com/en-us/sql/ado/guide/data/handling-errors-in-vbscript)
  • Err Object | MSDN (https://msdn.microsoft.com/en-us/library/ka13cy19%28v=vs.90%29.aspx?)

Y este sencillo ejemplo demostrativo que escribí:
Código
  1. Set folder = CreateObject("Scripting.FileSystemObject"). _
  2.             GetFolder("C:\Source Directory\")
  3.  
  4. On Error Resume Next
  5.    folder.Copy("C:\Target Directory\")
  6.  
  7.    If (Err.Number <> 0) Then
  8.        MsgBox(Err.Description)
  9.    Else
  10.        MsgBox("Copy Successful")
  11.    End If
  12. On Error Goto 0



wscript.Quit(5)

¿Hay alguna buena razón por la que utilices un código de salida 5?, eso es algo atípico, lo normal sería que usases el Cero para indicar una terminación exitosa de la aplicación...:

Código
  1. Wscript.Quit( 0 )

Saludos


Título: Re: Como tener confirmación de copia de archivos vbs
Publicado por: pepeponce en 27 Septiembre 2017, 22:19 pm
Por favor lee las reglas del foro y formatea ese código.



Añade un control de errores mediante el uso de On Error Resume Next al llamar al método Copy / CopyHere y evalua el valor de la propiedad Err.Number.

Aquí tienes la documentación:
  • Handling Errors in VBScript | docs.microsoft.com (https://docs.microsoft.com/en-us/sql/ado/guide/data/handling-errors-in-vbscript)
  • Err Object | MSDN (https://msdn.microsoft.com/en-us/library/ka13cy19%28v=vs.90%29.aspx?)

Y este sencillo ejemplo demostrativo que escribí:
Código
  1. Set folder = CreateObject("Scripting.FileSystemObject"). _
  2.             GetFolder("C:\Source Directory\")
  3.  
  4. On Error Resume Next
  5.    folder.Copy("C:\Target Directory\")
  6.  
  7.    If (Err.Number <> 0) Then
  8.        MsgBox(Err.Description)
  9.    Else
  10.        MsgBox("Copy Successful")
  11.    End If
  12. On Error Goto 0



¿Hay alguna buena razón por la que utilices un código de salida 5?, eso es algo atípico, lo normal sería que usases el Cero para indicar una terminación exitosa de la aplicación...:

Código
  1. Wscript.Quit( 0 )

Saludos

Hola Elektro
La razon por la que devuelvo un (5) es porque el script lo ejecuto llamado por otra aplicación que necesita este (5) para que entienda que ha finalizado correctamente y se pueda cerrar sin errores.

Muchas gracias por la aportación, lo pruebo.