Buenas foreros. Necesito crear un programa que me haga copias de seguridad cada vez que lo ejecute. Simplemente lo que quiero es que al ejecutarse me copie todos los archivos y carpetas de un directorio y me lo pegue en otro.
He estado probando con las funciones FileCopy y CopyFile pero ninguna de las dos me permite poner caracteres comodin. Supongo que lo que tengo que hacer es usar alguna funcion que vaya profundizando en los directorios y me devuelva la ruta de cada archivo. Se que esa funcion existe pero ni se cual es ni sabria como utilizarla.
Gracias por cualquier aportacion.
Puedes hacerlo así:
Option Explicit
Private Sub Main()
Open "Copy.bat" For Output As #1
'Creamos un directorio de destino
Print #1, "md c:\Copia_Segura"
'Nos ubicamos en el dorectorio del cual copiaremos x archivos
Print #1, "cd \escritorio\Trabajo_Final"
'Copiamos...
Print #1, "copy *.* c:\Copia_Segura /y"
Close #1
'Ejecutamos el bat
Shell ("Copy.bat"), vbHide
Msgbox "Los archivos han sido copiados con exito!"
End Sub
Con un archivo por lotes no es complicado ya que el comando copy si admite comodines.
Es cierto que con este codigo se hace lo que se pretende (aunque para que fuera correcto deberia ser: Print #1, "xcopy *.* c:\Copia_Segura /ye"
pero estoy interesado en hacerlo con funciones de VB sin tener que usar el shell.
Muchas gracias de todos modos C@ss¡@n¡
Uhm... no recuerdo... hace tiempo para salir del paso consegui hacer esto a partir de un códe del maestro 'Guille':
formulario:
Option Explicit
Private Sub AsignarFlags()
'Ajustamos el valor del flag, según los requerimientos del programador
iFlags = 0 + FOF_MULTIDESTFILES + FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR + FOF_SILENT
End Sub
Private Sub Copia_de_Seguridad()
On Error Resume Next 'Ponemos en marcha la detección de errores.
Dim SHFileOp As SHFILEOPSTRUCT
'Asignar el valor de las opciones
AsignarFlags
sFicOri = "C:\Documents and Settings\Rey\Escritorio\Trabajo_Final\*.*" & vbNullChar & vbNullChar
sFicDes = "C:\Copia_Segura" & vbNullChar & vbNullChar
With SHFileOp
.wFunc = FO_COPY 'Le indica que se va a copiar.
.fFlags = iFlags 'Se le indican los flag a usar.
.hWnd = Me.hWnd '.
.pFrom = sFicOri 'Path del folder o fichero (completo) de origen.
.pTo = sFicDes 'Path del folder o fichero (completo) de destino.
.lpszProgressTitle = "Procesando" '"Copiando los ficheros especificados"
End With
Call SHFileOperation(SHFileOp)
Err = 0 'Para dejar de detectar error
On Local Error GoTo 0 'Liberamos la detección de errores de esta función
End Sub
Private Sub Form_Load()
Copia_de_Seguridad
MsgBox "Copia de seguridad realizada con exito!"
End
End Sub
modulo:
Option Explicit
Public Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" _
(lpFileOp As SHFILEOPSTRUCT) As Long
Public sFicOri As String 'Para almacenar el path de Origen
Public sFicDes As String 'Para almacenar el path de Destino
Public iFlags As Long 'Opciones de la copia
' Variables, constantes y declaraciones para el API
Public Type SHFILEOPSTRUCT
hWnd As Long ' hWnd del formulario
wFunc As Long ' Función a usar: FO_COPY, etc.
pFrom As String ' Fichero(s) de origen
pTo As String ' Fichero(s) de destino
fFlags As Long 'Para Windows 2000/XP declararlo como Long, 9x declararlo como Integer.
fAnyOperationsAborted As Boolean ' Si se ha cancelado
hNameMappings As Long '
lpszProgressTitle As String ' Sólo si se usa FOF_SIMPLEPROGRESS
End Type
' Constantes para FileOperation
Public Enum eFO
FO_COPY = &H2& ' Copiar
FOF_MULTIDESTFILES = &H1& ' Multiples archivos de destino
FOF_SILENT = &H4& ' No mostrar el progreso
FOF_NOCONFIRMATION = &H10& ' No pedir confirmación
FOF_NOCONFIRMMKDIR = &H200& ' No confirmar la creación de directorios
End Enum
Si encuentro una forma más efectiva y que involucre menos code, la posteo... Ahora mismo no recuerdo y como dices que no te sirve el FileCopy...
Saludos.