ROBOCOPY : lister, copier, déplacer et synchroniser

ROBOCOPY : lister, copier, déplacer et synchroniser - Stockage/Sauvegarde - Windows & Software

Marsh Posté le 05-06-2006 à 10:42:59    

Bonjour à tous,

 

Pour ceux que cela intéresse, voici un VBScript facilitant l'utilisation de robocopy Version XP010 pour lister, copier, déplacer ou synchroniser des fichiers :

 
Code :
  1. '-------------------------------------------------------------
  2. ' Utilitaire :        ROBOCOPY22.vbs (version 2.2)
  3. ' But Ial:        Faciliter et automatiser l'utilisation de la commande DOS robocopy.exe.
  4. '            Cet utilitaire sera utilisé essentiellement pour analyser et purger les fichiers
  5. '            utilisateurs sur le serveur de fichiers.
  6. ' But IIaire :    approfondir le langage de script VBS
  7. ' Installation :    1/ Ce script sur le bureau du serveur de fichier
  8. '            2/ robocopy.exe XP010 (Ressource Kit XP) dans le répertoire %windir%
  9. ' Auteur :        J.Philippe SOSSON
  10. ' Versions    1.0    Menu + options de base : copier, déplacer, lister, synchroniser,
  11. '            critères selon la taille des fichiers, date de modification
  12. '        2.0    * Optimisation du code : Fonctions, procédures, tableaux et constantes
  13. '            * Ajout du critère selon la date d'accès
  14. '            * Correction de la fonction Mirroir : /MIR ne fonctionne pas avec l'option /XX
  15. '        2.1    * Ajout de l'option R) pour répéter la dernière commande
  16. '            * Modification de la sortie de l'utilitaire
  17. '        2.2    * Ajout de la gestion des messages en sortie de robocopy
  18. '            * Ajout d'un filtre sur les fichiers
  19. '-------------------------------------------------------------
  20. '------ Déclaration des variables et des constantes
  21. Option Explicit '------ Forcer la déclaration des variables
  22. Dim wsh, fso, FichierJournal
  23. Const C_Lecture = 1, C_Ecriture = 2
  24. Const C_FichierJournal = "c:\robocopy.txt"
  25. Dim CmdeRobocopy
  26. Dim ChoixMenu
  27. Dim SaisieDossier, SaisieFichier, SaisieDate, SaisieTaille, Validation
  28. Dim T_SelectionDossier(1)
  29. Const C_DossierSource = 0, C_DossierDestination = 1
  30. Dim T_SelectionDate(1, 3)
  31. Const C_DateOption = 0, C_DateTexte = 1
  32. Const C_DateAccesAnterieure = 0, C_DateAccesPosterieure = 1, C_DateModificationAnterieure = 2, C_DateModificationPosterieure = 3
  33. Dim T_SelectionTaille(1, 1)
  34. Const C_TailleOption = 0, C_TailleTexte = 1
  35. Const C_TailleMin = 0, C_TailleMax = 1
  36. Dim  CodeRetour, Bit, T_MessageRetour(5)
  37. '------ Déclaration des fonctions et procédures
  38. Function SelectionDossier(TypeDossier)
  39.     Do
  40.         SaisieDossier = InputBox("Dossier" & T_SelectionDossier(TypeDossier), "ROBOCOPY" )
  41.     Loop Until fso.FolderExists(SaisieDossier)
  42.     SelectionDossier = " " & SaisieDossier
  43. End Function
  44. Function SelectionFichier()
  45.     SaisieFichier = InputBox("Tri sur les fichiers" & Chr(10) & "Caratères génériques acceptés, *.* par défaut", "ROBOCOPY" )
  46.     If Len(SaisieFichier) > 0 Then
  47.         SelectionFichier = " " & SaisieFichier
  48.     End If
  49. End Function
  50. Function ChoixDate()
  51.     '------ Filtre sur les dates d'accès OU les dates de modification
  52.     If MsgBox("Souhaitez-vous trier les fichiers sur les dates d'accès", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
  53.         ChoixDate = SelectionDate(C_DateAccesAnterieure)
  54.         ChoixDate = ChoixDate & SelectionDate(C_DateAccesPosterieure)
  55.     Else
  56.         If MsgBox("Souhaitez-vous trier les fichiers sur les dates de modification", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
  57.             ChoixDate = SelectionDate(C_DateModificationAnterieure)
  58.             ChoixDate = ChoixDate & SelectionDate(C_DateModificationPosterieure)
  59.         End If
  60.     End If
  61. End Function
  62. Function SelectionDate(TypeDate)
  63.     Do
  64.         Validation = 0
  65.         SaisieDate = InputBox("Fichiers dont la date" & T_SelectionDate(C_DateTexte, TypeDate) & Chr(10) _
  66.                     & "Bouton [Annuler] si aucune, sinon JJ/MM/AAAA", "ROBOCOPY" )
  67.         If Len(SaisieDate) = 0 Then
  68.             Validation = vbYes
  69.         Else
  70.             if Len(SaisieDate) = 10 Then
  71.                 If IsNumeric(Right(SaisieDate,4)) And IsNumeric(Mid(SaisieDate,4,2)) And IsNumeric(Left(SaisieDate,2)) Then
  72.                     Validation = MsgBox("Veuillez confirmer : fichiers dont la date" _
  73.                                     & T_SelectionDate(C_DateTexte, TypeDate) & " à " & SaisieDate, vbYesNo + vbExclamation, "ROBOCOPY" )
  74.                     If Validation = vbYes Then
  75.                         SaisieDate = Right(SaisieDate,4) & Mid(SaisieDate,4,2) & Left(SaisieDate,2)
  76.                         SelectionDate = T_SelectionDate(C_DateOption, TypeDate) & SaisieDate
  77.                     End If
  78.                 End If
  79.             End If
  80.         End If
  81.     Loop Until Validation = vbYes
  82. End Function
  83. Function ChoixTaille()
  84.     If MsgBox("Souhaitez-vous trier les fichiers sur la taille", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
  85.         ChoixTaille = SelectionTaille(C_TailleMin)
  86.         ChoixTaille = ChoixTaille & SelectionTaille(C_TailleMax)
  87.     End If
  88. End Function
  89. Function SelectionTaille(TypeTaille)
  90.     Do
  91.         Validation = 0
  92.         SaisieTaille = InputBox("Fichiers dont la taille est" & T_SelectionTaille(C_TailleTexte, TypeTaille) & Chr(10) _
  93.                             & "Bouton [Annuler] si aucune, sinon X (en Go)", "ROBOCOPY" )
  94.         If Len(SaisieTaille) = 0 Then
  95.             Validation = vbYes
  96.         Else
  97.             If IsNumeric(SaisieTaille) Then
  98.                 Validation = MsgBox("Veuillez confirmer : fichiers dont la taille est" _
  99.                                 & T_SelectionTaille(C_TailleTexte, TypeTaille) & " à " & SaisieTaille & " Go" _
  100.                                 , vbYesNo + vbExclamation, "ROBOCOPY" )
  101.                 If Validation = vbYes Then
  102.                     SelectionTaille = T_SelectionTaille(C_TailleOption, TypeTaille) & Cstr(Clng(SaisieTaille)*1024*1024)
  103.                 End If
  104.             End If
  105.         End If
  106.     Loop Until Validation = vbYes
  107. End Function
  108. Function Journal()
  109.     Journal = " /LOG:c:\robocopy.log /NDL" 'Fichier journal et contenu
  110.     If MsgBox("Souhaitez-vous un affichage de l'exécution de la commande dans la console windows" _
  111.                 , vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
  112.         Journal = Journal & " /ETA /TEE"
  113.     End If
  114. End Function
  115. Sub ArchiveCommande(CmdeRobocopy, TypeAcces)
  116.     Set FichierJournal = fso.OpenTextFile(C_FichierJournal, TypeAcces, True)
  117.     If TypeAcces = C_Lecture Then
  118.         CmdeRobocopy = FichierJournal.ReadLine
  119.     Else
  120.         FichierJournal.WriteLine CmdeRobocopy
  121.     End If
  122.     FichierJournal.Close
  123. End Sub
  124.    
  125. Function MessageRetour(CodeRetour)
  126.     If CodeRetour = 0 Then
  127.         MessageRetour = T_MessageRetour(5)
  128.     Else
  129.         For Bit = 0 To 4
  130.             If (CodeRetour And (2^Bit)) = (2^Bit) Then
  131.                 MessageRetour = MessageRetour & T_MessageRetour(Bit)
  132.             End If
  133.         Next
  134.     End If
  135. End Function
  136.    
  137. Sub ExecuteCommande(CmdeRobocopy)
  138.     If MsgBox("Souhaitez-vous exécuter la commande suivante :" & Chr(10) _
  139.                 & CmdeRobocopy, vbYesNo + vbExclamation, "ROBOCOPY" ) = vbYes Then
  140.         CodeRetour = wsh.Run(CmdeRobocopy, 1, True) '------ Execution avec attente de la fin de la commande
  141.         MsgBox MessageRetour(CodeRetour), vbOKOnly, "ROBOCOPY"
  142.         wsh.Run("notepad.exe c:\robocopy.log" ) '------ Ouverture du fichier journal
  143.         ArchiveCommande CmdeRobocopy, C_Ecriture
  144.     End If
  145. End Sub
  146. '------ Initialisation des variables
  147. Set wsh = CreateObject("WScript.Shell" )
  148. Set fso = CreateObject("Scripting.FileSystemObject" )
  149. T_SelectionDossier(C_DossierSource) = " Source"
  150. T_SelectionDossier(C_DossierDestination) = " Destination"
  151. T_SelectionDate(C_DateOption, C_DateAccesAnterieure) = " /MINLAD:"
  152. T_SelectionDate(C_DateOption, C_DateAccesPosterieure) = " /MAXLAD:"
  153. T_SelectionDate(C_DateOption, C_DateModificationAnterieure) = " /MINAGE:"
  154. T_SelectionDate(C_DateOption, C_DateModificationPosterieure) = " /MAXAGE:"
  155. T_SelectionDate(C_DateTexte, C_DateAccesAnterieure) = " d'accès est antérieure"
  156. T_SelectionDate(C_DateTexte, C_DateAccesPosterieure) = " d'accès est postérieure"
  157. T_SelectionDate(C_DateTexte, C_DateModificationAnterieure) = " de modification est antérieure"
  158. T_SelectionDate(C_DateTexte, C_DateModificationPosterieure) = " de modification est postérieure"
  159. T_SelectionTaille(C_TailleOption, C_TailleMin) = " /MIN:"
  160. T_SelectionTaille(C_TailleOption, C_TailleMax) = " /MAX:"
  161. T_SelectionTaille(C_TailleTexte, C_TailleMin) = " supérieure"
  162. T_SelectionTaille(C_TailleTexte, C_TailleMax) = " inférieure"
  163. T_MessageRetour(0) = "Un ou plusieurs fichiers ont été copiés avec succès. "
  164. T_MessageRetour(1) = "Certains fichiers ou dossiers sont en EXTRA (Absent de la source, mais présent dans la destination). " & _
  165.             "Visualiser le fichier journal afin d'effectuer des opérations si nécessaire (sauf en cas de listage). "
  166. T_MessageRetour(2) = "Certains fichiers ou dossiers sont en dissonance. Visualiser le fichier journal afin d'effectuer des opérations si nécessaire. "
  167. T_MessageRetour(3) = "Certains fichiers ou dossiers n'ont pas pu être copiés (malgré le nombre et le délai des reprises spécifiés). "
  168. T_MessageRetour(4) = "Erreur sérieuse. Robocopy n'a copié aucun fichier. C'est une erreur d'utilisation de la commande " & _
  169.             "ou une erreur due aux privilèges d'accès insuffisants sur les dossiers sources ou destinations. "
  170. T_MessageRetour(5) = "Aucune erreur et aucune copie : les dossiers sources et destinations sont synchronisés. "
  171. '------ MAIN ------
  172. Do
  173.     CmdeRobocopy = "ROBOCOPY"
  174.     '------ CHOIX DE L'ACTION ------
  175.     ChoixMenu = UCase(InputBox("Votre choix :" & Chr(10) & Chr(10) _
  176.                 & "C) Copier des fichiers" & Chr(10) _
  177.                 & "D) Déplacer des fichiers" & Chr(10) _
  178.                 & "L) Lister des fichiers" & Chr(10) _
  179.                 & "M) Synchroniser des fichiers (Mirroir)" & Chr(10) _
  180.                 & "R) Répéter la dernière commande" & Chr(10) _
  181.                 & Chr(10) & "Bouton [Annuler] ou [Entrée] sans valeur pour Quitter" _
  182.                 ,"ROBOCOPY" ))
  183.     Select Case ChoixMenu
  184.         Case "C" '------ Copier des fichiers
  185.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
  186.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierDestination)
  187.             CmdeRobocopy = CmdeRobocopy & SelectionFichier()
  188.             CmdeRobocopy = CmdeRobocopy & ChoixDate()
  189.             CmdeRobocopy = CmdeRobocopy & ChoixTaille()
  190.             CmdeRobocopy = CmdeRobocopy & " /COPYALL /S /ZB" '------ Action a réaliser
  191.             CmdeRobocopy = CmdeRobocopy & " /R:3 /W:60" '------ Nombre et délai pour une reprise de l'action en cas d'échec
  192.             CmdeRobocopy = CmdeRobocopy & Journal()
  193.             ExecuteCommande CmdeRobocopy
  194.         Case "D" '------ Déplacer des fichiers
  195.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
  196.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierDestination)
  197.             CmdeRobocopy = CmdeRobocopy & SelectionFichier()
  198.             CmdeRobocopy = CmdeRobocopy & ChoixDate()
  199.             CmdeRobocopy = CmdeRobocopy & ChoixTaille()
  200.             CmdeRobocopy = CmdeRobocopy & " /COPYALL /S /ZB /MOVE" '------ Action a réaliser
  201.             CmdeRobocopy = CmdeRobocopy & " /R:3 /W:60" '------ Nombre et délai pour une reprise de l'action en cas d'échec
  202.             CmdeRobocopy = CmdeRobocopy & Journal()
  203.             ExecuteCommande CmdeRobocopy
  204.         Case "L" '------ Lister des fichiers
  205.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
  206.             CmdeRobocopy = CmdeRobocopy & " C:\" '------ Destination bidon car listage uniquement...
  207.             CmdeRobocopy = CmdeRobocopy & SelectionFichier()
  208.             CmdeRobocopy = CmdeRobocopy & ChoixDate()
  209.             CmdeRobocopy = CmdeRobocopy & ChoixTaille()
  210.             CmdeRobocopy = CmdeRobocopy & " /COPY:D /S /L /XX" '------ Action a réaliser
  211.             CmdeRobocopy = CmdeRobocopy & " /R:0 /W:0" '------ Nombre et délai pour une reprise de l'action en cas d'échec
  212.             CmdeRobocopy = CmdeRobocopy & Journal()
  213.             ExecuteCommande CmdeRobocopy
  214.         Case "M" '------ Synchroniser des fichiers (Mirroir)
  215.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
  216.             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierDestination)
  217.             CmdeRobocopy = CmdeRobocopy & " /COPYALL /E /ZB /MIR" '------ Action a réaliser
  218.             CmdeRobocopy = CmdeRobocopy & " /R:3 /W:60" '------ Nombre et délai pour une reprise de l'action en cas d'échec
  219.             CmdeRobocopy = CmdeRobocopy & Journal()
  220.             ExecuteCommande CmdeRobocopy
  221.         Case "R" '------ Répéter la dernière commande
  222.             If fso.FileExists(C_FichierJournal) Then
  223.                 ArchiveCommande CmdeRobocopy, C_Lecture
  224.                 ExecuteCommande(CmdeRobocopy)
  225.             Else
  226.                 MsgBox "Commande Impossible : c:\robocopy.txt est introuvable...", vbOKOnly, "ROBOCOPY"
  227.             End If
  228.         Case "" '------ Quitter par le bouton [Annuler] ou [Entrée] sans valeur
  229.             If MsgBox("Confirmation de l'abandon de l'utilitaire", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbNo Then
  230.                 ChoixMenu = "On ne quitte pas la procédure"
  231.             End If
  232.         Case Else
  233.             MsgBox "Choix de menu incorrect...", vbOKOnly, "ROBOCOPY"
  234.     End Select
  235. Loop Until Len(ChoixMenu) = 0
 

Reply

Marsh Posté le 05-06-2006 à 10:42:59   

Reply

Marsh Posté le 03-01-2012 à 11:30:52    

Bonjour,
Je profite de l'occasion pour présenter de bon voeux.
J'ai trouver votre script concernant RObocopy.
je l'ai inséré dans une feuille visual basic.
Mais comment je fait pour appeler ce script?
Je vous remercie par avance de votre réponse.
SLT
amial@hotmail.fr

Reply

Marsh Posté le 03-01-2012 à 12:24:15    

c'est un VBscript. pas un VBA.

 

tu prend le text, le colle dans notepad et tu le sauve/renomme en .vbs

 

et en ligne de commande, tu lancera ton fichier avec "cscript monfichier.vbs"


Message édité par Z_cool le 03-01-2012 à 12:26:04

---------------
#mais-chut
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed