Martinibianco Posted October 13, 2007 Share Posted October 13, 2007 (edited) Hi Everybody i'm a newbie of Autoit (v.3.2.8.1)i have wrote 2 script to back-up folders (with Scite v.1.74).But this one give me trouble...CODE;BARRA Progressiva per backup file$start = IniRead("Backup.ini", "Dimensione", "dimfile", "") ;read the dimension of original file stored into an .ini file$stop = (DirGetSize($dir_dest)/1024) ;get the dimension of destination (empty)ProgressOn("Back-Up", "Avanzamento in corso...", "0 %", 180, 300, 16)Do sleep(1000) ;refresh 1 second $i = Round(($stop / $start * 100),0) ProgressSet( $i, $i & " % - " & Round($stop, 2) & " Mb") ;Update progressbar with % and Mb $stop = (DirGetSize($dir_dest)/1024) ;chek actual size (HERE IT'S THE TROUBLE); MsgBox(0, "dimensione cartella", "Origine: " & $start & @LF & "Destinazione: " & $stop)Until $stop >= $startProgressSet(100 , "Operazione Terminata", "Finito!")sleep(500)ProgressOff()Exit... i have 1 file to back-up but it's 2Gb and progress window close after few seconds...i suppose (as MadBoy) because "Windows" reserving the space (i have already read this topic: http://www.autoitscript.com/forum/index.php?showtopic=44485)and my DirGetSize($dir_dest) reach immediately the scheduled size.. Does anybody found how to read the correct filled space of destination during the copy? Edited October 13, 2007 by Martinibianco Link to comment Share on other sites More sharing options...
corz Posted October 13, 2007 Share Posted October 13, 2007 What would be the point? ;o) (or nothing is foolproof to the sufficiently talented fool.. Link to comment Share on other sites More sharing options...
weaponx Posted October 13, 2007 Share Posted October 13, 2007 What is stored in $dir_dest, is it a file or a path? If it is a filename, why are you using DirGetSize()? Where is the command that actually does the copy? Link to comment Share on other sites More sharing options...
Martinibianco Posted October 15, 2007 Author Share Posted October 15, 2007 What is stored in $dir_dest, is it a file or a path? Hi Weaponx.. the command used is: DirCopy ($dir_principale,$dir_backup1,1) it's a path and to tell the truth more than one (max 3: dir_principale, dir_altro1, dir_altro2) i have to work with some big files (think to Outlook .pst file, see attached image) and this is the script that copy files: (it works but it's a work in progress.. i have to improve routines) : CODE ; Leggo il percorso dei file da Backuppare $dir_backup1 = IniRead("Backup.ini", "Settings", "dir_backup1", "") ;Percorso Principale su cui archiviare la copia $dir_backup2 = IniRead("Backup.ini", "Settings", "dir_backup2", "") ;Percorso Locale con copia dei file $dir_principale = IniRead("Backup.ini", "Settings", "dir_principale", "") ;Percorso che contiene i file principali da salvare $dir_altro1 = IniRead("Backup.ini", "Settings", "dir_altro1", "") ;Percorso con altri file da salvare $dir_altro2 = IniRead("Backup.ini", "Settings", "dir_altro2", "") ;Percorso con altri file da salvare $copia_fatta = 0 $flag = 0 ;per "Barra.exe" azzero il controllo IniWrite("Backup.ini", "Flag", "controllo", "0") ;segno la data del "tentativo" di back-up IniWrite("Backup.ini", "Ultimo_Run", "tentativo", _Now()) SplashTextOn("Operazioni in corso.", "Controllo i Settaggi.", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;Controllo se ĆØ stata selezionata almeno una cartella d'origine if $dir_principale = "" And $dir_altro1 = "" And $dir_altro2 = "" then MsgBox(16, "Attenzione", "Non ĆØ stata selezionata una cartella d'origine." & @LF _ & "Verifica i settaggi del file Backup.ini") Exit EndIf ;Controllo se sono state inserite le directory di destinazione del back-up if $dir_backup1 = "" And $dir_backup2 = "" then MsgBox(16,"Avviso", "Non sono state inserite le directory" & @LF _ & "Verifica i settaggi del file Backup.ini") Exit EndIf #include <Date.au3> ;Per marcare la data di esecuzione sul file "Backup.ini" #include <Array.au3> ;Funzione utente per inizializzare una matrice (vedere messaggio finale con _ArrayCreate) Dim $size_pre1 Dim $size_pre2 Dim $size_post1 Dim $size_post2 Dim $size ;Copia File nella Directory "Locale" if $dir_backup2 <> "" Then $risposta = 0 ;Setto la variabile per le risposte ;Controllo cha la cartella "Locale" esista e.. $dir_status = DriveStatus($dir_backup2) ;..se non esiste la creo if $dir_status = "UNKNOWN" Then $risposta = MsgBox(35,"Avviso", "La directory " & $dir_backup2 & " non esiste!" & @LF _ & "Devo crearla?") Select Case $risposta = 6 ;YES -> Creo directory DirCreate($dir_backup2) MsgBox(64,"Avviso", "Ho creato la directory " & $dir_backup2) Call("Copiaggio2") $copia_fatta = 1 Case $risposta = 7 ;NO -> Non creo Directory MsgBox(64,"Avviso", "NON ho creato la directory " & $dir_backup2) $flag = $flag + 1 Case $risposta = 2 ;Cancel -> Esco dal programma MsgBox(64,"Avviso", "Termine Programma!") Exit EndSelect EndIf if $risposta = 0 then Call("Copiaggio2") EndIf ;Copio i file dalla cartella Locale (se settata) a quella sul Server (se settata) if $dir_backup1 <> "" Then $risposta = 0 ;Setto la variabile per le risposte ;Controllo cha la cartella "Remota" esista e.. $dir_status = DriveStatus($dir_backup1) ;..se non esiste la creo if $dir_status = "UNKNOWN" Then $risposta = MsgBox(35,"Avviso", "La directory " & $dir_backup1 & " non esiste!" & @LF _ & "Devo crearla?") Select Case $risposta = 6 ;YES -> Creo directory DirCreate($dir_backup1) MsgBox(64,"Avviso", "Ho creato la directory " & $dir_backup1) Call("Copiaggio1") Case $risposta = 7 ;NO -> Non creo Directory MsgBox(64,"Avviso", "NON ho creato la directory " & $dir_backup1) $flag = $flag + 1 Case $risposta = 2 ;Cancel -> Esco dal programma MsgBox(64,"Avviso", "Termine Programma!") Exit EndSelect EndIf if $risposta = 0 then Call("Copiaggio1") EndIf SplashTextOn("Operazioni in corso.", "Aggiorno file .ini", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) SplashOff() ;per "Barra.exe" azzero il controllo e segno l'ora del back-up IniWrite("Backup.ini", "Flag", "controllo", "0") IniWrite("Backup.ini", "Ultimo_Run", "eseguito", _Now()) ; Messaggio che riepiloga la dimensione dei file nella Directory prima e dopo il Back-Up (la routine lavora in modo da ;leggere la dimensione delle destinazioni solo 1 volta.. vedere funzioni call a fine listato) If $flag <> 2 Then ;Converto i valori archiviati nelle variabili circa i contenuti e le dimensioni delle directory di destinazione If $size_pre1 = "" Then $size_pre1 = _ArrayCreate(0, 0, 0) If $size_pre2 = "" Then $size_pre2 = _ArrayCreate(0, 0, 0) If $size_post1 = "" Then $size_post1 = _ArrayCreate(0, 0, 0) If $size_post2 = "" Then $size_post2 = _ArrayCreate(0, 0, 0) MsgBox(64, "Info", "Back-Up Terminato." & @LF & @LF _ & "Directory Sorgenti: " & @LF _ & $dir_principale & @LF _ & $dir_altro1 & @LF _ & $dir_altro2 & @LF & @LF _ & "Dati Prima del Back-up:" & @LF _ & "Sub-Directory nr.: " & $size_pre1[2] + $size_pre2[2] & @LF _ & "Nr. file contenuti: " & $size_pre1[1] + $size_pre2[1] & @LF _ & "Dimensione totale directory (Gb): " & Round(($size_pre1[0]/1024/1024/1000) + ($size_pre2[0]/1024/1024/1000),2) & @LF _ & @LF & "-----------------------" & @LF _ & "Directory di Destinazione: " & @LF _ & $dir_backup1 & @LF _ & $dir_backup2 & @LF & @LF _ & "Dati Dopo il Back-up:" & @LF _ & "Sub-Directory nr.: " & $size_post1[2] + $size_post2[2] & @LF _ & "Nr. file salvati: " & $size_post1[1] + $size_post2[1] & @LF _ & "Dimensione totale directory (Gb): " & Round(($size_post1[0]/1024/1024/1000) + ($size_post2[0]/1024/1024/1000),2)) Else MsgBox(64,"Avviso", "Non sono state inserite le directory" & @LF _ & "per l'archiviazione dei dati. Back-up non eseguito.") EndIf Exit Func Recuperadimensione() ; Recupero le informazioni sulla dimensione dei file nelle direcory del back-up e lo scrivo nel Backup.ini $size = 0 if $dir_principale <> "" then $size = $size + DirGetSize($dir_principale) if $dir_altro1 <> "" then $size = $size + DirGetSize($dir_altro1) if $dir_altro2 <> "" then $size = $size + DirGetSize($dir_altro2) $size = ($size/1024/1024) IniWrite("Backup.ini", "Dimensione", "dimfile", $size) EndFunc Func Copiaggio2() SplashTextOn("Operazioni in corso.", "Recupero la dimensione dei File" & @LF & "di cui fare il back-up", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ; Recupero le informazioni sulla dimensione dei file nelle direcory del back-up e lo scrivo nel Backup.ini Recuperadimensione() ;Vuoto la directory SvuotaCartella($dir_backup2) SplashTextOn("Operazioni in corso.", "Copio File in " & @LF & $dir_backup2, 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;per "Barra.exe" memorizzo di quale back-up (Locale) deve segnalare la % IniWrite("Backup.ini", "Flag", "controllo", "2") Run("Barra.exe") if $dir_principale <> "" Then DirCopy ($dir_principale,$dir_backup2,1) ;Sovrascrivo i file EndIf if $dir_altro1 <> "" Then DirCopy ($dir_altro1,$dir_backup2,1) ;Sovrascrivo i file EndIf if $dir_altro2 <> "" Then DirCopy ($dir_altro2,$dir_backup2,1) ;Sovrascrivo i file EndIf ; Recupero le nuove informazioni sui file della directory dopo il back-up secondario $size_post2 = DirGetSize($dir_backup2,1) EndFunc Func Copiaggio1() SplashTextOn("Operazioni in corso.", "Recupero la dimensione dei File" & @LF & "di cui fare il back-up", 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ; Recupero le informazioni sulla dimensione dei file nelle direcory del back-up e lo scrivo nel Backup.ini Recuperadimensione() ;Vuoto la directory SvuotaCartella($dir_backup1) SplashTextOn("Operazioni in corso.", "Copio File in " & @LF & $dir_backup1, 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;per "Barra.exe" memorizzo di quale back-up (Server) deve segnalare la % IniWrite("Backup.ini", "Flag", "controllo", "1") Run("Barra.exe") ;Se ho giĆ fatto una copia in una cartella "Locale" uso questa come sorgente... if $copia_fatta=1 then DirCopy($dir_backup2,$dir_backup1,1) ;Sovrascrivo i file con lo stesso nome Else ;altrimenti prendo i file dalle cartelle originali if $dir_principale <> "" Then DirCopy ($dir_principale,$dir_backup1,1) ;Sovrascrivo i file EndIf if $dir_altro1 <> "" Then DirCopy ($dir_altro1,$dir_backup1,1) ;Sovrascrivo i file EndIf if $dir_altro2 <> "" Then DirCopy ($dir_altro2,$dir_backup1,1) ;Sovrascrivo i file EndIf ; Recupero le nuove informazioni sui file della directory dopo il back-up principale $size_post1 = DirGetSize($dir_backup1,1) EndIf EndFunc Func SvuotaCartella($folder) SplashTextOn("Operazioni in corso.", "Cancello File nella directory " & @LF & $folder, 250, 100, -1, -1, 32, "Verdana", 8) Sleep(3000) ;Thanks to 'Pixel75' Local $search, $file, $attrib $search = FileFindFirstFile($folder & "\*.*") If $search <> -1 Then While 1 $file = FileFindNextFile($search) If @error Then ExitLoop $attrib = FileGetAttrib($folder & "\" & $file) If StringInStr($attrib, "D") Then DirRemove($folder & "\" & $file, 1) Else FileDelete($folder & "\" & $file) EndIf Wend EndIf EndFunc and this is the .ini file where i store the informations: CODE; Settaggio delle directory per il backup dei dati [settings] ;Percorso Principale che contiene i file da salvare dir_principale = "D:\Posta" ;Percorso 1 aggiuntivo con altri file da salvare dir_altro1 = "" ;Percorso 2 aggiuntivo con altri file da salvare dir_altro2 = "" ;Percorso 1 su cui archiviare la copia dei file (meglio Server) dir_backup1 = "\\Srv2003\studio m\OE Backup\Temp" ;Percorso 2 su cui fare una ulteriore copia dei file (meglio Locale) dir_backup2 = "C:\Posta" ;Flag per la barra progressiva [Flag] controllo =0 ;Dimensione dei file salvati in Mb [Dimensione] dimfile =23.9227409362793 ;Date di riferimento [ultimo_Run] tentativo =12/10/2007 20.04.28 eseguito =12/10/2007 20.05.07 and the script of Progress Bar (Barra.exe): CODE ;BARRA Progressiva per backup file $FlagGlobale = IniRead("Backup.ini", "Flag", "Controllo", "0") ;directory origine Select Case $FlagGlobale = 0 ;nessun valore -> fine MsgBox(16,"Attenzione", "Per il Back-Up bisogna eseguire Backup.exe" & @LF _ & "Barra.exe serve per visualizzare la barra % progressiva.") Exit Case $FlagGlobale = 1 ;back-up 1 (principale, server) $dir_dest = IniRead("Backup.ini", "Settings", "dir_backup1", "") ;directory destinazione Case $FlagGlobale = 2 ;back-up 2 (secondario, locale) $dir_dest = IniRead("Backup.ini", "Settings", "dir_backup2", "") ;directory destinazione EndSelect $start = IniRead("Backup.ini", "Dimensione", "dimfile", "") ;dimensione origine $stop = (DirGetSize($dir_dest)/1024) ;dimensione destinazione ProgressOn("Back-Up", "Avanzamento in corso...", "0 %", 180, 300, 16) Do sleep(1000) ;refresh ogni 1 secondi $i = Round(($stop / $start * 100),0) ProgressSet( $i, $i & " % - " & Round($stop, 2) & " Mb") ;Aggiorno la barra progressiva con % e Mb $stop = (DirGetSize($dir_dest)/1024) ;ri-controllo la dimensione della destinazione ; MsgBox(0, "dimensione cartella", "Origine: " & $start & @LF & "Destinazione: " & $stop) Until $stop >= $start ProgressSet(100 , "Operazione Terminata", "Finito!") sleep(500) ProgressOff() Exit Please be patient about mistakes.. :"> Link to comment Share on other sites More sharing options...
Stalker0 Posted October 16, 2007 Share Posted October 16, 2007 I have also had issues with dirgetsize and lotus notes copying. I've found that a combination of the file modification date and the file size is a good way to watch the file progress. Basically, you poll the file size and modification date every X seconds, and determined if there's a change. Running both helps ensure if one gets caught up you have another net to catch on to. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now