Page 1 sur 1

Batch Backup Generator [GUI] v2

Publié : jeu. 16/oct./2014 10:40
par Ar-S
J'ai fait pour un client un petit fichier Batch (.bat) pour lancer une sauvegarde de ses documents.
ça marche très bien. J'ai donc fait un petit générateur de fichiers BATCH (fichier .bat) permettant de lancer une copie incrémentielle basée sur la date de création des fichiers. Bien moins long que de réinventer la roue en PB.

Note : Activez le support unicode dans les options de compilation.


Utilisation :
1 - Choisissez le dossier dont vous voulez copier le contenu.
2 - Choisissez le dossier où vous souhaitez copier ce contenu.
3 - Cliquez sur générer.

Les petits ajouts en plus de l'interface
- Nom du fichier .bat de sortie éditable
- Possibilité d'ajouter la date et l'heure au nom de fichier (pour le bat)
- Le logiciel vous propose aussi d'ouvrir le planificateur de tâches.

Voilà si ça peut vous servir.

EnJoYeZ

Code : Tout sélectionner

; Batch Backup generator by Ar-S // 11-10-2014 // PB 5.30 x86

;v2

Declare OpenWindow_LDVM()
Declare.s Resume()
Declare ChoosePATH(gadget)

Enumeration
  #LDVM
EndEnumeration
;}
;{ Gadgets
Enumeration
  #TXT_SRC
  #TXT_NOM
  #TXT_DEST
  #EX_SRC
  #E_SRC
  #EX_DEST
  #E_DEST
  #INFO
  #NOMFICHIER
  #BT_MODIF
  #CheckDate
  #BT_GO
EndEnumeration


Global.b ChooseDest, DateADD, EtatModif
Global CheminInitial$, source$, destination$, nomfichier$, Resume$, extension$, FullName$
ChooseDest = 0
CheminInitial$ = "C:\"
source$ = CheminInitial$
destination$ = source$
nomfichier$ = "BatchCopy"
extension$ = ".bat"
FullName$ = nomfichier$ + extension$

Procedure OpenWindow_LDVM()
  If OpenWindow(#LDVM, 444, 208, 637, 490, "Xcopy Batch Backup Generator - LDV MULTIMEDIA - v2.0", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      TextGadget(#TXT_SRC, 5, 5, 310, 20, "Placez vous dans le dossier à sauvegarder", #SS_CENTERIMAGE)
      TextGadget(#TXT_DEST, 320, 5, 310, 20, "Plassez vous dans le dossier de sauvegarde", #SS_CENTERIMAGE)
      TextGadget(#TXT_NOM, 3, 440, 98, 20, "Nom du fichier :", #SS_CENTERIMAGE)
      
      ExplorerComboGadget(#EX_SRC, 1, 30, 315, 25, CheminInitial$, #PB_Explorer_DrivesOnly)
      ExplorerListGadget(#E_SRC, 1, 55, 315, 285, CheminInitial$, #PB_Explorer_AutoSort|#PB_Explorer_FullRowSelect|#PB_Explorer_GridLines|#PB_Explorer_NoDriveRequester|#PB_Explorer_NoFiles)
      
      ExplorerComboGadget(#EX_DEST, 320, 30, 315, 25, CheminInitial$, #PB_Explorer_DrivesOnly)
      ExplorerListGadget(#E_DEST, 320, 55, 315, 285, CheminInitial$, #PB_Explorer_AutoSort|#PB_Explorer_FullRowSelect|#PB_Explorer_GridLines|#PB_Explorer_NoDriveRequester|#PB_Explorer_NoFiles)
      
      EditorGadget(#INFO, 1, 343, 635, 95, #PB_Editor_ReadOnly)
      
      StringGadget(#NOMFICHIER, 105, 440, 130, 20, nomfichier$)
      DisableGadget(#NOMFICHIER,1)
      ButtonGadget(#BT_MODIF, 240, 440, 75, 20, "Modifier")
      CheckBoxGadget(#CheckDate, 326, 440, 305, 20, "Ajouter la date et l'heure ?")
      
      ButtonGadget(#BT_GO, 1, 463, 636, 25, "Générer le fichier : ", #BS_FLAT)
	
	Resume()
      
    EndIf
EndProcedure



Procedure WriteBat(Fichierbat.s)
Shared BAT_Path_File$

BAT_Path_File$ = GetCurrentDirectory() + Fichierbat.s
If CreateFile(0, BAT_Path_File$)         
	WriteStringN(0, "@echo off",#PB_UTF8)
	WriteStringN(0, "echo..",#PB_UTF8)
	WriteStringN(0, "echo LDV MULTIMEDIA Batch Copy System",#PB_UTF8)
	WriteStringN(0, "echo Copie incrementielle en cours...",#PB_UTF8)
	WriteStringN(0, "xcopy "+Chr(34) + source$ + Chr(34) + " " +Chr(34) + destination$ + Chr(34) + " /E /H /R /Y /I /D",#PB_UTF8)
	WriteStringN(0, "echo Copie terminee presser une touche pour quitter",#PB_UTF8)
	WriteStringN(0, "pause",#PB_UTF8)
	WriteStringN(0, "exit",#PB_UTF8)
	CloseFile(0) 
	ProcedureReturn 1
Else
	ProcedureReturn 0
EndIf	
	
EndProcedure

Procedure ChoosePATH(gadget)
Debug gadget
	If gadget < #INFO And gadget > #TXT_DEST
		PathGadget$ = GetGadgetText(Gadget)

		Select Gadget
			; Les Volumes disques			
			Case #EX_SRC
				source$ = GetGadgetText(Gadget)
				source$ = Left(source$,3)
				Debug source$
				SetGadgetText(#E_SRC, source$)
				LenS = Len(source$)
				source$=Left(source$, LenS-1)
				
			Case #EX_DEST
				destination$ = GetGadgetText(Gadget)
				SetGadgetText(#E_DEST, destination$)
				LenD = Len(destination$)
				Destination$=Left(destination$, LenD-1) 	
				
			
			; Les explorers				
			Case #E_SRC
				source$ = GetGadgetText(Gadget)
				SetGadgetText(#EX_SRC, source$)
				LenS = Len(source$)
				source$=Left(source$, LenS-1)
				
			Case #E_DEST
				destination$ = GetGadgetText(Gadget)
				SetGadgetText(#EX_DEST, destination$)
				LenD = Len(destination$)
				Destination$=Left(destination$, LenD-1) 	
			
		EndSelect	
		
		SetGadgetText(#INFO, Resume() )
			
	EndIf		
			
EndProcedure

Procedure.s DateBackup()
Protected Date$,Time$
Date$ = FormatDate("%yyyy-%mm-%dd-", Date())
Time$ = FormatDate("%hhh%iim%sss", Date())
ProcedureReturn Date$+Time$
EndProcedure

Procedure.s Resume()
	Resume$ = "Vous allez créer un fichier Batch permétant la copie du contenu de : "+ Chr(10) + source$ + Chr(10) + "dans le dossier : " + destination$ + Chr(10) + "Sous le nom " + FullName$ + Chr(10) + "Vous pouvez cliquer sur GENERER"
	ProcedureReturn Resume$
EndProcedure







OpenWindow_LDVM()






Repeat

  Select WaitWindowEvent(20)
    Case #PB_Event_Gadget
      Select EventGadget()
      
        Case #EX_SRC
        	  ChoosePATH(#EX_SRC)
			  
        Case #EX_DEST
        	ChoosePATH(#EX_DEST)
	  		
        Case #E_SRC
        	ChoosePATH(#E_SRC)
        	 		  
        Case #E_DEST
        	ChoosePATH(#E_DEST)
       	
        Case #BT_MODIF
        	If EtatModif = 0
	        	DisableGadget(#NOMFICHIER,0)
	        	DisableGadget(#BT_GO,1)
	        	DisableGadget(#CheckDate,1)
	        	SetGadgetText(#BT_MODIF,"Valider")
				EtatModif = 1    
				SetActiveGadget(#NOMFICHIER)
			ElseIf EtatModif = 1
				DisableGadget(#NOMFICHIER,1)
	        	DisableGadget(#BT_GO,0)
 	        	DisableGadget(#CheckDate,0)
	        	SetGadgetText(#BT_MODIF,"Modifier")
				EtatModif = 0   
				nomfichier$ = GetGadgetText(#NOMFICHIER)
				FullName$ = nomfichier$+extension$
						
			EndIf    
        	
        	
        	
        SetGadgetText(#INFO, Resume() )
        
        
        
        Case #CheckDate
        	If GetGadgetState(#CheckDate)<> 0 
        		DateADD = #True
        		extension$ = "_"+DateBackup()+".bat"
        	Else
        		DateADD = #False
        		extension$ = ".bat"
        	EndIf
        		FullName$ = nomfichier$ + extension$
        	SetGadgetText(#INFO, Resume() )
        
        Case #BT_GO
        
        	If source$ <> destination$
	        	If WriteBat(FullName$) = 1
					Q = MessageRequester("OK","Vous avez créer un BATCH qui va copier le contenue de : "+Chr(10)+source$+Chr(10)+"vers"+Chr(10)+destination$+Chr(10)+Chr(10)+"Souhaitez vous accéder au fichier BATCH ?",0|#PB_MessageRequester_YesNo|#MB_ICONQUESTION)
					If Q = #PB_MessageRequester_Yes
						Path$ = GetCurrentDirectory()
						
						Q2 = MessageRequester("Planifier une sauvegarde ?","Voulez vous aussi lancer le planificateur de tâche de windows ?",0|#PB_MessageRequester_YesNo|#MB_ICONQUESTION)
						If Q2 = #PB_MessageRequester_Yes	
							RunProgram("Taskschd.msc","","",0)
						EndIf
						RunProgram(path$,"","",0)
					EndIf
				EndIf
        	Else
        		MessageRequester("Erreur","Attention, la source et la destination sont identiques !",#MB_ICONEXCLAMATION)
        	EndIf
        
        
      EndSelect
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #LDVM
          CloseWindow(#LDVM)
          Break
      EndSelect
  EndSelect
ForEver


 End

Re: Batch Backup Generator

Publié : jeu. 16/oct./2014 13:48
par kernadec
bonjour Ar-S
je vais essayer cela plus tard, d'ailleurs cela me sera utile..
merci pour le partage
Cordialement

Re: Batch Backup Generator

Publié : jeu. 16/oct./2014 15:10
par TazNormand
Salut AR-S

Excellent initiative, mais pour faire mon "chieur" de service, manque une petite option pour ajouter une tâche planifiée (/s Windows) :oops:

Re: Batch Backup Generator

Publié : jeu. 16/oct./2014 15:38
par Ar-S
Merci pour le retour, je bosse à faire une GUI plus sympa que les 2 pathrequester() je verrai à y ajouter le planificateur de tâche.
:P

----Edit-----
Version plus étoffée avec GUI et + au 1er topic
J'ai fait moins de tests avec cette versions donc merci pour vos retours

Re: Batch Backup Generator [GUI] v2

Publié : jeu. 16/oct./2014 19:25
par majikeyric
Ar-s: tu oublies de fermer le fichier .bat après écriture (et le fichier sauvegardé fait 0 octet si tu ne quitte pas l'application correctement).

Code : Tout sélectionner

If CreateFile(0, BAT_Path_File$)         
   WriteStringN(0, "@echo off",#PB_UTF8)
   WriteStringN(0, "echo..",#PB_UTF8)
   WriteStringN(0, "echo LDV MULTIMEDIA Batch Copy System",#PB_UTF8)
   WriteStringN(0, "echo Copie incrementielle en cours...",#PB_UTF8)
   WriteStringN(0, "xcopy "+Chr(34) + source$ + Chr(34) + " " +Chr(34) + destination$ + Chr(34) + " /E /H /R /Y /I /D",#PB_UTF8)
   WriteStringN(0, "echo Copie terminee presser une touche pour quitter",#PB_UTF8)
   WriteStringN(0, "pause",#PB_UTF8)
   WriteStringN(0, "exit",#PB_UTF8)
   CloseFile(0)
   ProcedureReturn 1
Else
	ProcedureReturn 0
EndIf   
De plus, c'est pas très recommandé de remplacer les constantes PB par leur valeur, par exemple:

Code : Tout sélectionner

Q = MessageRequester("OK","...")
If Q = 6
Car ce qui marche aujourd'hui ne marchera pas forcémment pour une autre version de PB, ou un autre plate-forme.

Et si je me rappelle bien, lorsqu'on sauve plusieurs fois d'affilé un fichier avec un timestamp, c'est le premier fichier avec le même timestamp qui est écrasé à chaque fois.

Re: Batch Backup Generator [GUI] v2

Publié : jeu. 16/oct./2014 21:22
par Ar-S
Merci pour ces remarques (et désolé pour le closefile, c'est la looserie), j'ai corrigé en conséquences. :mrgreen: