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.
[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)]
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í:
Set folder = CreateObject("Scripting.FileSystemObject"). _
GetFolder("C:\Source Directory\")
On Error Resume Next
folder.Copy("C:\Target Directory\")
If (Err.Number <> 0) Then
MsgBox(Err.Description)
Else
MsgBox("Copy Successful")
End If
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...:
Wscript.Quit( 0 )
Saludos
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í:
Set folder = CreateObject("Scripting.FileSystemObject"). _
GetFolder("C:\Source Directory\")
On Error Resume Next
folder.Copy("C:\Target Directory\")
If (Err.Number <> 0) Then
MsgBox(Err.Description)
Else
MsgBox("Copy Successful")
End If
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...:
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.