JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Synchronisation de deux PC Mar 9 Nov 2010 - 13:52 | |
| J'ai un pc de bureau sur lequel je travaille (?) habituellement. Et je suis amené à m'absenter plusieurs jours d'affilée, n'importe quand, dans une autre résidence. Pour ça j'ai acheté un pc portable (eh oui, je suis très riche mais on trouve de bonnes affaires en étant patient, les prix on bien baissé). Le problème est que j'ai envie de continuer sur le portable ce qui était en cours sur le pc de bureau, notamment des programmes en cours de mise au point, et au retour de faire le même chose sur le pc fixe. Je me suis donc écrit un petit programme, que j'ai appelé en toute modestie ( ) Synchro, qui a les fonctions suivantes: - sauvegarder depuis le pc fixe sur une clé usb dédiée le contenu d'un certain nombre de répertoires - restaurer le contenu de la clé usb sur le pc portable - sauvegarder les mêmes répertoires depuis le portable sur la clé - restaurer sur le fixe le contenu de la clé. Ce programme fait appel à deux ressources externes: - GVL.dll, de Klaus, qui permet de connaître le nom des volumes montés (pour identifier la clé usb ou le pc) - Robocopy.exe, outil de copie intelligente de Microsoft (gratuit évidemment). Il y a un certain nombre de paramètres personnels à modifier en début de programme: - le nom (Label) de la clé usb utilisée, clé de taille suffisante pour contenir la sauvegarde - les noms des disques durs (C:) des deux pc fixe et portable (au besoin leur en donner un, avec la commande Label) - la liste (DATAs) des noms des répertoires (avec leurs sous-répertoires) à sauvegarder - le chemin de robocopy.exe et le chemin de la dll de Klaus. Ca dépend du nombre et du contenu des répertoires, mais la première sauvegarde peut être assez longue (les clés usb ne sont pas des bêtes de course). Mais par la suite robocopy ne copie que ce qui a été ajouté ou modifié et ça peut aller très vite. Il y a même dans robocopy une option 'miroir' qui reproduit l'image exacte du répertoire d'origine, avec des suppressions éventuelles, mais je ne l'ai pas utilisée: voir les options avec robocopy.exe /?. - Code:
-
' Sauvegardes PC->clé, clé->PC, Portable->clé, clé->Portable DIM cle$, Robo$, fm$, fb$, w0, h0, lb, hb, xb, yb, nrep, i%, a$, b$, vol$ DIM pc$, r1$, r2$, pcf$, pcp$, c$, evo$, lu$, lc$, v$, tb, tr, dllvol$ DIM rep$(30) LABEL PC2Cle, Cle2Pc, Portable2Cle, Cle2Portable, Volumes, Sauve, Fin, Qu, rr ' Liste des répertoires à sauvegarder ou restaurer DATA "Comptes", "Doc", "Donnees", "Langages\FreeBasic\SOURCES" DATA "Langages\PANORAMIC","MATERIEL", "MENUS", "OUTILS" DATA "Progra~1\Panora~1", "TEXTES", "UTIL" DATA "F"
cle$ = "DANELEC_8G": ' label de la clé de sauvegarde pcf$ = "ACER_JEAN": ' nom du pc fixe (HD C:) pcp$ = "COMPAQ_JEAN": ' nom du pc portable (HD C:) Robo$ = "C:\UTIL\ROBOCOPY.exe " dllvol$ = "C:\Langages\Panoramic\DLL\GVL.dll": ' DLL Klaus fb$ = "C:\BAT\SV.BAT "
pcp$ = " nom."
nrep = 0: READ a$ WHILE a$ <> "F" nrep = nrep + 1: rep$(nrep) = a$ READ a$ END_WHILE
w0 = 320: h0 = 240 WIDTH 0,w0: HEIGHT 0,h0: CAPTION 0, " - SYNCHRO PC/PORTABLE -" COLOR 0,220,255,255 lb = 130 lb = (w0-40)/2 hb = 24 xb = 10: yb = 55
BUTTON 1: LEFT 1, xb: TOP 1, yb: WIDTH 1, lb: HEIGHT 1, hb CAPTION 1, "PC -> Clé" ON_CLICK 1, PC2Cle BUTTON 2: LEFT 2, xb: TOP 2, yb+hb+5: WIDTH 2, lb: HEIGHT 2, hb CAPTION 2, "Clé -> PC" ON_CLICK 2, Cle2PC BUTTON 3: LEFT 3, xb: TOP 3, yb+2*hb+10: WIDTH 3, lb: HEIGHT 3, hb CAPTION 3, "PORTABLE -> Clé" ON_CLICK 3, Portable2Cle BUTTON 4: LEFT 4, xb: TOP 4, yb+3*hb+15: WIDTH 4, lb: HEIGHT 4, hb CAPTION 4, "Clé -> PORTABLE" ON_CLICK 4, Cle2Portable Qu: BUTTON 5: LEFT 5, xb: TOP 5, yb+4*hb+20: WIDTH 5, lb: HEIGHT 5, hb CAPTION 5, "Quitter" ON_CLICK 5, Fin ALPHA 10: TOP 10, yb: LEFT 10, xb+lb+5: WIDTH 10, lb: HEIGHT 10, 5*hb+20 COLOR 10, 255,255,255 ALPHA 11: TOP 11, 5: LEFT 11, 40: WIDTH 11, w0-80: HEIGHT 11, 20 ALPHA 12: TOP 12, 28: LEFT 12, 40: WIDTH 12, w0-80: HEIGHT 12, 20 COLOR 11, 255,255,255: COLOR 12, 255,255,255 FONT_SIZE 0, 10: FONT_BOLD 0 PRINT_LOCATE 10, 5: PRINT "PC:" PRINT_LOCATE 10, 28: PRINT "Clé:" GOSUB Volumes IF vol$ = "" a$ = "Clé de sauvegarde non montée !" + CHR$(10) + CHR$(10) a$ = a$ + "Monter la clé " + cle$ + ", puis relancer la sauvegarde." MESSAGE a$ GOTO Fin END_IF a$ = " C: " + pc$ + " ("+lu$+"% libre) " CAPTION 11, a$ a$ = " " + vol$ + " " + cle$ + " ("+lc$+"% libre) " CAPTION 12, a$ END Fin: TERMINATE ' =============================================================================
PC2Cle: IF pc$ <> pcf$ a$ = "PC fixe non trouvé !" + CHR$(10) + CHR$(10) a$ = a$ + " Abandon." MESSAGE a$ TERMINATE END_IF r1$ = "C:": r2$ = vol$ + "": b$ = "PC -> Clé" GOSUB Sauve RETURN
Cle2PC: IF pc$ <> pcf$ a$ = "PC fixe non trouvé !" + CHR$(10) + CHR$(10) a$ = a$ + " Abandon." MESSAGE a$ TERMINATE END_IF r1$ = vol$ + "": r2$ = "C:": b$ = "Clé -> PC" GOSUB Sauve RETURN
Portable2Cle: IF pc$ <> pcp$ a$ = "PC portable non trouvé !" + CHR$(10) + CHR$(10) a$ = a$ + " Abandon." MESSAGE a$ TERMINATE END_IF r1$ = "C:": r2$ = vol$ + "": b$ = "Portable -> Clé" GOSUB Sauve RETURN
Cle2Portable: IF pc$ <> pcp$ a$ = "PC portable non trouvé !" + CHR$(10) + CHR$(10) a$ = a$ + " Abandon." MESSAGE a$ TERMINATE END_IF r1$ = vol$ + "": r2$ = "C:": b$ = "Clé -> Portable" GOSUB Sauve RETURN
Volumes: ' Liste des volumes montés et actifs avec leur nom DLL_ON dllvol$ i% = DLL_CALL0("GetVolumeList") DLL_OFF v$ = CLIPBOARD_STRING_PASTE$ rr: i% = INSTR(v$, CHR$(10)) IF i% > 0 a$ = LEFT$(v$, i%-1): v$ = MID$(v$, i%+1, 1000) c$ = MID$(a$, 3, 1): IF (ASC(c$) < 65 OR ASC(c$) > 90) THEN GOTO rr b$ = RTRIM$(MID$(a$, 60, 100)) IF MID$(a$, 19, 1) = " " tb = VAL(MID$(a$, 20, 13)): tr = VAL(MID$(a$, 37, 13)) END_IF IF c$ = "C" THEN pc$ = RTRIM$(MID$(a$, 60,100)): lu$ = STR$(INT(100*tr/tb)) IF b$ <> cle$ THEN GOTO rr vol$ = c$ + ":": lc$ = STR$(INT(100*tr/tb)) END_IF RETURN
Sauve: ' création et exécution du fichier batch de sauvegarde FILE_OPEN_WRITE 1, fb$ FILE_WRITELN 1, "@echo off" FOR i% = 1 TO nrep a$ = r1$ + rep$(i%) + " " + r2$ + rep$(i%) + " /S /R:0 /NP": ' pas de fichier log FILE_WRITELN 1, Robo$ + a$ NEXT i% FILE_CLOSE 1 EXECUTE_WAIT fb$ FONT_SIZE 10, 12: FONT_BOLD 10 CAPTION 10, "Sauvegarde" + CHR$(10) + b$ + CHR$(10) + " terminée !" RETURN | |
|