[Ex] Synchronisation de deux emplacements

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

[Ex] Synchronisation de deux emplacements

#1

Message par GhostLine »

J'ai un peu joué avec hier soir avec la nouvelle version d'AutoIt :)

Ci après, un bout de code permettant la synchronisation de deux emplacements disques, de manière récursive, supprimant ce qui n'est plus sur la source sur la cible, et donnant des attributs de date de création identiques aux originaux aux copies.

En espérant que cela puisse servir à quelqu'un :)

Code : Tout sélectionner

#include <file.au3>
#include <Array.au3>

$chemin_source = "E:\Program Files (x86)"
$chemin_destination = "E:\Program Files (x86) - Copy"
$source = _FileListToArrayRec($chemin_source, "*", 0, 1)
$destination = _FileListToArrayRec($chemin_destination, "*", 0, 1)

;~  1 - On recopie ce qui est sur la source et qui n'est pas sur la cible
For $i = 1 To UBound($source) - 1
    $recherche_copie = _ArraySearch($destination, $source[$i])
    If $recherche_copie = -1 Then
        FileCopy($chemin_source & "\" & $source[$i] & "\", $chemin_destination & "\" & $source[$i] & "\", $FC_CREATEPATH)
        FileSetTime($chemin_destination & "\" & $source[$i], FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1), $FT_CREATED)
        ConsoleWrite("Ajout " & $chemin_destination & "\" & $source[$i] & " - création" & @CR)
    ElseIf FileGetTime($chemin_destination & "\" & $destination[$recherche_copie], $FT_CREATED, 1) <> FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1) Then
        FileCopy($chemin_source & "\" & $source[$i] & "\", $chemin_destination & "\" & $source[$i] & "\", $FC_OVERWRITE)
        FileSetTime($chemin_destination & "\" & $source[$i], FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1), $FT_CREATED)
        ConsoleWrite("Rempl. " & $chemin_destination & "\" & $source[$i] & " - timestamp" & @CR)
    ElseIf FileGetSize($chemin_destination & "\" & $destination[$recherche_copie]) <> FileGetSize($chemin_source & "\" & $source[$i]) Then
        FileCopy($chemin_source & "\" & $source[$i] & "\", $chemin_destination & "\" & $source[$i] & "\", $FC_OVERWRITE)
        FileSetTime($chemin_destination & "\" & $source[$i], FileGetTime($chemin_source & "\" & $source[$i], $FT_CREATED, 1), $FT_CREATED)
        ConsoleWrite("Rempl. " & $chemin_destination & "\" & $source[$i] & " - taille" & @CR)
    EndIf
Next

;~  2 - On efface ce qui est sur la cible mais qui n'est plus sur la source
For $j = 1 To UBound($destination) - 1
    If _ArraySearch($source, $destination[$j]) = -1 Then
        FileDelete($chemin_destination &"\"& $destination[$j])
        DirRemove($chemin_destination &"\"& $destination[$j & "\"], 1)
        ConsoleWrite("Suppr. "&$chemin_destination&"\" & $destination[$j] & @CR)
    EndIf
Next
Répondre