Batch Backup Generator [GUI] v2

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Batch Backup Generator [GUI] v2

Message 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
Dernière modification par Ar-S le jeu. 16/oct./2014 21:21, modifié 3 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Batch Backup Generator

Message par kernadec »

bonjour Ar-S
je vais essayer cela plus tard, d'ailleurs cela me sera utile..
merci pour le partage
Cordialement
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Batch Backup Generator

Message 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:
Image
Image
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Batch Backup Generator

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Batch Backup Generator [GUI] v2

Message 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.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Batch Backup Generator [GUI] v2

Message par Ar-S »

Merci pour ces remarques (et désolé pour le closefile, c'est la looserie), j'ai corrigé en conséquences. :mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre