Bonjour,
Je vous présente ici mon premier scripte UTILE ! Je dois faire une sauvegarde sur une machine. J'ai un certain nombre de fichiers et de dossiers à sauvegarder et ne pas les mélanger (d'où la structure en 4 boucles même si une fonction se serait justifié dans mon cas

La liste des adresses est fixée dans le fichier ini qui est joint. Je vais donc placer cet exe sur une clé usb avec sont fichier ini. Je la connecte au pc de la machine puis je lance la sauvegarde.
La structure est la même pour les 3 boucles fichiers. J'attends que vous me confirmiez que je ne vais pas cramer la machine en l'essayant pour le tester.
(


Voici mon scripte :
Code : Tout sélectionner
; -------------------- Déclarations --------------------
; Hotkey
MsgBox(0, "HotKey", "Vous pouvez quiter à tout moment en pressant la touche Echap (Esc)", 2)
HotKeySet("{ESC}", "Close")
; Déclaration des variables.
$Fini = @WorkingDir & "\Liste copie.ini"
Dim $Choix
Dim $Recherche, $WinActi
Dim $Nommachine
; -------------------- Algo --------------------
;Vérifier que la supervision est bien fermée
$WinActi = WinGetTitle("Wrapper Sup")
If WinExists($WinActi) Then
$Choix = MsgBox(1, "Supervision ouverte", "La supervision est ouverte, voulez vous la fermer ?")
If $Choix = 1 Then
WinClose($WinActi)
Sleep(5000)
If WinExists($WinActi) Then
MsgBox(0, "Erreur", "Le programme ne parvient pas à fermer la supervision, veuillez le faire amnuelement avant de relancer la sauvegarde.", 5)
Exit
EndIf
Else
MsgBox(0, "Info", "Veuillez fermer la supervision avant de relancer la sauvegarde", 5)
Exit
EndIf
EndIf
;Vérifier que le fichier ini est bien présent
If Not FileExists($Fini) Then
MsgBox(0, "Fichier ini introuvable", "Le fichier ini portant toutes les adresses de copie est introuvable." & @CRLF & @CRLF & "Merci de la placer dans le même dossier que l'executable.", 5)
Exit
EndIf
;Nom de la machine et date de sauvegarde
$Nommachine = InputBox("Nom machine", "Sur quel machine effectuez vous la sauvegarde ?" & @CRLF & "Ecrire : N° machine N° Job", "MW XX Job XXXX")
; Copie des fichiers ----------------------------------------------------------------------------------------
Dim $i = 0
$Adresse = @WorkingDir & "\Fichiers de " & $Nommachine & " au " & @MDAY & "_" & @MON & "_" & @YEAR & "\"
DirCreate($Adresse)
$Section = "Fichiers"
If IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" Then
Else ;Si la section est vide, on ne fait rien
Do
If FileExists(IniRead($Fini, $Section, "Dir" & $i, "Fin")) Then
;Fin représente la valeur par défaut quand il n'y a pas d'adresse entré dans le fichier ini
FileCopy(IniRead($Fini, $Section, "Dir" & $i, "Fin"), $Adresse)
Else
$Choix = MsgBox(1, "Fichier introuvable", "Voulez vous chercher le fichier " & IniRead($Fini, $Section, "Nom" & $i, "Fin") & " à la main ?")
If $Choix = 1 Then ;décide de le chercher à la main
$Recherche = FileOpenDialog("Recherche du fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "''", @HomeDrive, "All (*.*)")
If @error Then ;ne l'a ps trouvé
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
Else
FileCopy($Recherche, $Adresse) ;il l'a trouvé
EndIf
Else
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
EndIf
EndIf
$i = $i + 1 ;ajout pour la boucle
Until IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" ;jusqu'à trouver mon marquer dans le fichier ini
EndIf
MsgBox(0, "Chec point", "Tous les fichiers de la section Fichiers sont copiés.", 3)
;Copie des dossiers de supervision ---------------------------------------------------------------
;La structure est à peux près la même
$i = 0
$Section = "Dossiers"
If IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" Then
Else ;Si la section est vide, on ne fait rien
Do
$Poids = DirGetSize(IniRead($Fini, $Section, "Dir" & $i, ""))
;Je n'ai pas trouvé mieux pour tester l'existence :s
If $Poids < 0 Then
$Choix = MsgBox(1, "Dossier introuvable", "Voulez vous chercher le dossier " & IniRead($Fini, $Section, "Nom" & $i, "Fin") & " à la main ?")
If $Choix = 1 Then ;décide de le chercher à la main
$Recherche = FileSelectFolder("Recherche du dossier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "''", @HomeDrive, "All (*.*)")
If @error Then ;ne l'a ps trouvé
MsgBox(0, "Dossier absent", "Le dossier ''" & IniRead($Fini, $Section, "Nom" & $i, "Erreur") & "'' n'a pas été trouvé." & @CRLF & "Il ne sera donc pas copié.", 5)
Else
DirCopy($Recherche, $Adresse & IniRead($Fini, $Section, "Nom" & $i, "") & "\", 1)
EndIf
Else
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
EndIf
Else
DirCopy(IniRead($Fini, $Section, "Dir" & $i, ""), $Adresse & IniRead($Fini, $Section, "Nom" & $i, "") & "\", 1)
EndIf
$i = $i + 1
Until IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin"
EndIf
MsgBox(0, "Chec point", "Tous les fichiers de la section Dossiers sont copiés.", 3)
;Copie des fichiers de windows ---------------------------------------------------------------------------------------------
$i = 0
$Adresse = $Adresse & "\Windows"
DirCreate($Adresse)
$Section = "Windows"
If IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" Then
Else ;Si la section est vide, on ne fait rien
Do
If FileExists(IniRead($Fini, $Section, "Dir" & $i, "Fin")) Then
;Fin représente la valeur par défaut quand il n'y a pas d'adresse entré dans le fichier ini
FileCopy(IniRead($Fini, $Section, "Dir" & $i, "Fin"), $Adresse)
Else
$Choix = MsgBox(1, "Fichier introuvable", "Voulez vous chercher le fichier " & IniRead($Fini, $Section, "Nom" & $i, "Fin") & " à la main ?")
If $Choix = 1 Then ;décide de le chercher à la main
$Recherche = FileOpenDialog("Recherche du fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "''", @WindowsDir, "All (*.*)")
If @error Then ;ne l'a ps trouvé
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
Else
FileCopy($Recherche, $Adresse) ;il l'a trouvé
EndIf
Else
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
EndIf
EndIf
$i = $i + 1 ;ajout pour la boucle
Until IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" ;jusqu'à trouver mon marquer dans le fichier ini
EndIf
MsgBox(0, "Chec point", "Tous les fichiers de la section Windows sont copiés.", 3)
;Copie des fichiers de system -----------------------------------------------------------------------------------------------
$i = 0
$Adresse = $Adresse & "\System"
DirCreate($Adresse)
$Section = "System"
If IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" Then
Else ;Si la section est vide, on ne fait rien
Do
If FileExists(IniRead($Fini, $Section, "Dir" & $i, "Fin")) Then
;Fin représente la valeur par défaut quand il n'y a pas d'adresse entré dans le fichier ini
FileCopy(IniRead($Fini, $Section, "Dir" & $i, "Fin"), $Adresse)
Else
$Choix = MsgBox(1, "Fichier introuvable", "Voulez vous chercher le fichier " & IniRead($Fini, $Section, "Nom" & $i, "Fin") & " à la main ?", 5)
If $Choix = 1 Then ;décide de le chercher à la main
$Recherche = FileOpenDialog("Recherche du fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "''", @SystemDir, "All (*.*)")
If @error Then ;ne l'a ps trouvé
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
Else
FileCopy($Recherche, $Adresse) ;il l'a trouvé
EndIf
Else
MsgBox(0, "Info", "Le fichier ''" & IniRead($Fini, $Section, "Nom" & $i, "Fin") & "'' ne sera pas copié.", 5)
EndIf
EndIf
$i = $i + 1 ;ajout pour la boucle
Until IniRead($Fini, $Section, "Dir" & $i, "Fin") = "Fin" ;jusqu'à trouver mon marquer dans le fichier ini
EndIf
MsgBox(0, "Chec point", "Tous les fichiers de la section System sont copiés.", 3)
;Marqueur de fin -------------------------------------------------------------------------------------------------------
MsgBox(0, "Fin", "La copie est terminée.")
; Fonction pour la hot key
Func Close()
MsgBox(0, "Arret", "Vous avez pressé Esc, le programme va se fermer.", 2)
Exit
EndFunc ;==>Close