Página 1 de 1

Backup de datos

Publicado: 30 Oct 2009, 23:15
por conmed
Hola amigos, estuve viendo en el foro un ejemplo de hacerle un backup a un a unidad cualquiera y lo que pasa es que cuando le cambio de ruta, por ejemplo, "F:/" solo copia los archivos de esa unidad pero SIN sus carpetas. ¿Cómo hago para que haga el backup de toda la unidad? O existe alguna otra manera más fácil?, el code es este:

Código: Seleccionar todo

Author Basicos foro http://www.autoit.es

#include <Date>

#include <file>

Opt("trayicondebug", 1)

Global $BackupDesde = "g:\test", $BackupHaciaCarpeta = "g:\Mybackup"

$iRekursive=0

$message = ""

$backupName=StringLeft(StringReplace(_NowCalc(), "/", ""), 6) & "_BackUpReport.log"

$backupLog = @ScriptDir & "\" & $backupName

SplashTextOn("My Backup", "", 800, 600, 100, 200, 4, "")

_FileWriteLog($backupLog, @CRLF &@CRLF & "Resultados de la copia incremental desde " & $BackupDesde & " hacia " & $BackupHaciaCarpeta & "..:" & @CRLF)

DateiKopyDirInkre($BackupDesde, $BackupHaciaCarpeta, $backupLog,$iRekursive)

Run("Notepad.exe " & $backupLog)

WinWait($backupName,"")

If Not WinActive($backupName,"") Then WinActivate($backupName)

WinWaitActive($backupName,"",5)

Send("{CTRLDOWN}{END}{CTRLUP}")

Exit



Func DateiKopyDirInkre($BackupDesde, $BackupHaciaCarpeta, $backupLog,$iRekursive)

_FileWriteLog($backupLog, @crlf&" A la carpeta.... " & $BackupHaciaCarpeta)

;FileChangeDir($BackupDesde)

$search = FileFindFirstFile($BackupDesde & "\*.*")

; Test ob gefunden

If $search = -1 Then

ControlSetText("My Backup", "", "Static1", $message & " No existe la carpeta desde de la Mascara " & $BackupDesde)

_FileWriteLog($backupLog, "*Fehler Kopiert... " & " No existe la carpeta desde de la Mascara " & $BackupDesde)

Else

While 1

$file = FileFindNextFile($search)

If @error Then ExitLoop

If FileGetAttrib($BackupDesde & "\" & $file) = "D" Then

if $iRekursive then DateiKopyDirInkre($BackupDesde & "\" & $file, $BackupHaciaCarpeta & "\" & $file, $backupLog,$iRekursive)

Else

DateiKopyInkrementelle($BackupDesde & "\" & $file, $BackupHaciaCarpeta & "\" & $file, 1, $backupLog)

EndIf

WEnd

; Handle Zu machen

FileClose($search)

EndIf

EndFunc ;==>DateiKopyDirInkre

Func DateiKopyInkrementelle($fromfile, $tofile, $NeuKopieren, $backupLog)

$wFehler = ""

If Not FileExists($tofile) Then

If $NeuKopieren Then

If Not FileCopy($fromfile, $tofile, 9) Then

_FileWriteLog($backupLog, "*Error al Copiar ... " & FileGetShortName($fromfile) & "->" & FileGetShortName($tofile))

$wFehler = " nicht kopiert"

Else

_FileWriteLog($backupLog, "+Bien al Copiar ... " & FileGetShortName($fromfile) & "->" & FileGetShortName($tofile))

EndIf

EndIf

Else

$fromCrc = FileGetAttrib($fromfile) & FileGetSize($fromfile) & FileGetTime($fromfile)

$toCrc = FileGetAttrib($tofile) & FileGetSize($tofile) & FileGetTime($tofile)

If $fromCrc <toCrc>DateiKopyInkrementelle If Not FileCopy($fromfile, $tofile, 9) Then

_FileWriteLog($backupLog, "*Error al Copiar ... " & FileGetShortName($fromfile) & "->" & FileGetShortName($tofile))

$wFehler = "<nicht>" & FileGetShortName($tofile))

EndIf

Else

_FileWriteLog($backupLog, "=Nada Ya existía ... " & FileGetShortName($fromfile) & "->" & FileGetShortName($tofile))

EndIf

EndIf

$message &= "Copiar " & $fromfile & " hacia " & $tofile & $wFehler & @CRLF

ControlSetText("My Backup", "", "Static1", $message)

EndFunc ;==>DateiKopyInkrementelle 
Y si talvez se podría programar el tiempo de cada backup.

Re: Backup de datos

Publicado: 31 Oct 2009, 01:33
por BasicOs
Hola
corregí lo del enlace del au3, el servidor antiguo era con el puerto :8888, al quitarlo te funciona en http://www.emesn.com/mas/Copia_Segurida ... mental.au3

Como ves el programa es un ejemplo muy bueno de funciones autoRECURSIVAS, sobre si mismo.
Así por encima tiene el código Principal y luego hay dos funciones, la primera que es DateiKopyDirInkre que va pasando por el directorio y la otra función que es un copy como más detallado.

Tendrías que probarlo tu mismo, y no es nada dificil, es simplemente añadir una linea que te cree la carpeta antes de copiar el fichero para que cuando lo copie en la carpeta lo haga en la nueva carpeta creada (fijate en las rutas copiar de -- copiar hasta puedes apuntarlas con los valores de las variables).
El comando para crear carpetas es el DirCreate("C:\carpeta0\carpeta1\carpeta2")
Else
;;=====>> añadir aqui crear la carpeta algo así como
;;==(si lo deseas puedes controlar si la funcion te devuelve cero si no pudo controlarlo o con "if FileExists ( $BackupHaciaCarpeta )" si ya existe el DIR.)

DirCreate($BackupHaciaCarpeta)
DateiKopyInkrementelle($BackupDesde & "\" & $file, $BackupHaciaCarpeta & "\" & $file, 1, $backupLog)
EndIf


Probando seguro que te sale muy bien,
Salu2:)


Aquí tienes un programador de tareas como el del LInux el CRON: http://www.emesn.com/autoitforum/viewto ... cron#p2439