Jump to content

Recommended Posts

Posted (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 >= $start

ProgressSet(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 by Martinibianco
Posted

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?

Posted

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.. :">

post-28038-1192437673_thumb.jpg

Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...