Dji-Pih  |  Avec un serveur de fichiers, on ne supprime pas, on ARCHIVE. Voici le script VBS que j'utilise avec ROBOCOPY pour archiver :  1/ Je liste avec les critères de choix : date accès, taille, type,... (pour vérifier l'espace disque à gagner), 2/ Je déplace les fichiers (en gardant l'arborescence) 3/ Je grave  les fichiers, 4/ Je supprime les fichiers déplacés  Code :
 - '-------------------------------------------------------------
 - ' Utilitaire :        ROBOCOPY22.vbs (version 2.2)
 - ' But Ial:        Faciliter et automatiser l'utilisation de la commande DOS robocopy.exe.
 - '            Cet utilitaire sera utilisé essentiellement pour analyser et purger les fichiers
 - '            utilisateurs sur le serveur de fichiers.
 - ' But IIaire :    approfondir le langage de script VBS
 - ' Installation :    1/ Ce script sur le bureau du serveur de fichier
 - '            2/ robocopy.exe XP010 (Ressource Kit XP) dans le répertoire %windir%
 - ' Auteur :        J.Philippe SOSSON
 - ' Versions    1.0    Menu + options de base : copier, déplacer, lister, synchroniser,
 - '            critères selon la taille des fichiers, date de modification
 - '        2.0    * Optimisation du code : Fonctions, procédures, tableaux et constantes
 - '            * Ajout du critère selon la date d'accès
 - '            * Correction de la fonction Mirroir : /MIR ne fonctionne pas avec l'option /XX
 - '        2.1    * Ajout de l'option R) pour répéter la dernière commande
 - '            * Modification de la sortie de l'utilitaire
 - '        2.2    * Ajout de la gestion des messages en sortie de robocopy
 - '            * Ajout d'un filtre sur les fichiers
 - '-------------------------------------------------------------
 - '------ Déclaration des variables et des constantes
 - Option Explicit '------ Forcer la déclaration des variables
 - Dim wsh, fso, FichierJournal
 - Const C_Lecture = 1, C_Ecriture = 2
 - Const C_FichierJournal = "c:\robocopy.txt"
 - Dim CmdeRobocopy
 - Dim ChoixMenu
 - Dim SaisieDossier, SaisieFichier, SaisieDate, SaisieTaille, Validation
 - Dim T_SelectionDossier(1)
 - Const C_DossierSource = 0, C_DossierDestination = 1
 - Dim T_SelectionDate(1, 3)
 - Const C_DateOption = 0, C_DateTexte = 1
 - Const C_DateAccesAnterieure = 0, C_DateAccesPosterieure = 1, C_DateModificationAnterieure = 2, C_DateModificationPosterieure = 3
 - Dim T_SelectionTaille(1, 1)
 - Const C_TailleOption = 0, C_TailleTexte = 1
 - Const C_TailleMin = 0, C_TailleMax = 1
 - Dim  CodeRetour, Bit, T_MessageRetour(5)
 - '------ Déclaration des fonctions et procédures
 - Function SelectionDossier(TypeDossier)
 -     Do
 -         SaisieDossier = InputBox("Dossier" & T_SelectionDossier(TypeDossier), "ROBOCOPY" )
 -     Loop Until fso.FolderExists(SaisieDossier)
 -     SelectionDossier = " " & SaisieDossier
 - End Function
 - Function SelectionFichier()
 -     SaisieFichier = InputBox("Tri sur les fichiers" & Chr(10) & "Caratères génériques acceptés, *.* par défaut", "ROBOCOPY" )
 -     If Len(SaisieFichier) > 0 Then
 -         SelectionFichier = " " & SaisieFichier
 -     End If
 - End Function
 - Function ChoixDate()
 -     '------ Filtre sur les dates d'accès OU les dates de modification
 -     If MsgBox("Souhaitez-vous trier les fichiers sur les dates d'accès", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
 -         ChoixDate = SelectionDate(C_DateAccesAnterieure)
 -         ChoixDate = ChoixDate & SelectionDate(C_DateAccesPosterieure)
 -     Else
 -         If MsgBox("Souhaitez-vous trier les fichiers sur les dates de modification", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
 -             ChoixDate = SelectionDate(C_DateModificationAnterieure)
 -             ChoixDate = ChoixDate & SelectionDate(C_DateModificationPosterieure)
 -         End If
 -     End If
 - End Function
 - Function SelectionDate(TypeDate)
 -     Do
 -         Validation = 0
 -         SaisieDate = InputBox("Fichiers dont la date" & T_SelectionDate(C_DateTexte, TypeDate) & Chr(10) _
 -                     & "Bouton [Annuler] si aucune, sinon JJ/MM/AAAA", "ROBOCOPY" )
 -         If Len(SaisieDate) = 0 Then
 -             Validation = vbYes
 -         Else
 -             if Len(SaisieDate) = 10 Then
 -                 If IsNumeric(Right(SaisieDate,4)) And IsNumeric(Mid(SaisieDate,4,2)) And IsNumeric(Left(SaisieDate,2)) Then
 -                     Validation = MsgBox("Veuillez confirmer : fichiers dont la date" _
 -                                     & T_SelectionDate(C_DateTexte, TypeDate) & " à " & SaisieDate, vbYesNo + vbExclamation, "ROBOCOPY" )
 -                     If Validation = vbYes Then
 -                         SaisieDate = Right(SaisieDate,4) & Mid(SaisieDate,4,2) & Left(SaisieDate,2)
 -                         SelectionDate = T_SelectionDate(C_DateOption, TypeDate) & SaisieDate
 -                     End If
 -                 End If
 -             End If
 -         End If
 -     Loop Until Validation = vbYes
 - End Function
 - Function ChoixTaille()
 -     If MsgBox("Souhaitez-vous trier les fichiers sur la taille", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
 -         ChoixTaille = SelectionTaille(C_TailleMin)
 -         ChoixTaille = ChoixTaille & SelectionTaille(C_TailleMax)
 -     End If
 - End Function
 - Function SelectionTaille(TypeTaille)
 -     Do
 -         Validation = 0
 -         SaisieTaille = InputBox("Fichiers dont la taille est" & T_SelectionTaille(C_TailleTexte, TypeTaille) & Chr(10) _
 -                             & "Bouton [Annuler] si aucune, sinon X (en Go)", "ROBOCOPY" )
 -         If Len(SaisieTaille) = 0 Then
 -             Validation = vbYes
 -         Else
 -             If IsNumeric(SaisieTaille) Then
 -                 Validation = MsgBox("Veuillez confirmer : fichiers dont la taille est" _
 -                                 & T_SelectionTaille(C_TailleTexte, TypeTaille) & " à " & SaisieTaille & " Go" _
 -                                 , vbYesNo + vbExclamation, "ROBOCOPY" )
 -                 If Validation = vbYes Then
 -                     SelectionTaille = T_SelectionTaille(C_TailleOption, TypeTaille) & Cstr(Clng(SaisieTaille)*1024*1024)
 -                 End If
 -             End If
 -         End If
 -     Loop Until Validation = vbYes
 - End Function
 - Function Journal()
 -     Journal = " /LOG:c:\robocopy.log /NDL" 'Fichier journal et contenu
 -     If MsgBox("Souhaitez-vous un affichage de l'exécution de la commande dans la console windows" _
 -                 , vbYesNo + vbQuestion, "ROBOCOPY" ) = vbYes Then
 -         Journal = Journal & " /ETA /TEE"
 -     End If
 - End Function
 - Sub ArchiveCommande(CmdeRobocopy, TypeAcces)
 -     Set FichierJournal = fso.OpenTextFile(C_FichierJournal, TypeAcces, True)
 -     If TypeAcces = C_Lecture Then
 -         CmdeRobocopy = FichierJournal.ReadLine
 -     Else
 -         FichierJournal.WriteLine CmdeRobocopy
 -     End If
 -     FichierJournal.Close
 - End Sub
 -    
 - Function MessageRetour(CodeRetour)
 -     If CodeRetour = 0 Then
 -         MessageRetour = T_MessageRetour(5)
 -     Else
 -         For Bit = 0 To 4
 -             If (CodeRetour And (2^Bit)) = (2^Bit) Then
 -                 MessageRetour = MessageRetour & T_MessageRetour(Bit)
 -             End If
 -         Next
 -     End If
 - End Function
 -    
 - Sub ExecuteCommande(CmdeRobocopy)
 -     If MsgBox("Souhaitez-vous exécuter la commande suivante :" & Chr(10) _
 -                 & CmdeRobocopy, vbYesNo + vbExclamation, "ROBOCOPY" ) = vbYes Then
 -         CodeRetour = wsh.Run(CmdeRobocopy, 1, True) '------ Execution avec attente de la fin de la commande
 -         MsgBox MessageRetour(CodeRetour), vbOKOnly, "ROBOCOPY"
 -         wsh.Run("notepad.exe c:\robocopy.log" ) '------ Ouverture du fichier journal
 -         ArchiveCommande CmdeRobocopy, C_Ecriture
 -     End If
 - End Sub
 - '------ Initialisation des variables
 - Set wsh = CreateObject("WScript.Shell" )
 - Set fso = CreateObject("Scripting.FileSystemObject" )
 - T_SelectionDossier(C_DossierSource) = " Source"
 - T_SelectionDossier(C_DossierDestination) = " Destination"
 - T_SelectionDate(C_DateOption, C_DateAccesAnterieure) = " /MINLAD:"
 - T_SelectionDate(C_DateOption, C_DateAccesPosterieure) = " /MAXLAD:"
 - T_SelectionDate(C_DateOption, C_DateModificationAnterieure) = " /MINAGE:"
 - T_SelectionDate(C_DateOption, C_DateModificationPosterieure) = " /MAXAGE:"
 - T_SelectionDate(C_DateTexte, C_DateAccesAnterieure) = " d'accès est antérieure"
 - T_SelectionDate(C_DateTexte, C_DateAccesPosterieure) = " d'accès est postérieure"
 - T_SelectionDate(C_DateTexte, C_DateModificationAnterieure) = " de modification est antérieure"
 - T_SelectionDate(C_DateTexte, C_DateModificationPosterieure) = " de modification est postérieure"
 - T_SelectionTaille(C_TailleOption, C_TailleMin) = " /MIN:"
 - T_SelectionTaille(C_TailleOption, C_TailleMax) = " /MAX:"
 - T_SelectionTaille(C_TailleTexte, C_TailleMin) = " supérieure"
 - T_SelectionTaille(C_TailleTexte, C_TailleMax) = " inférieure"
 - T_MessageRetour(0) = "Un ou plusieurs fichiers ont été copiés avec succès. "
 - T_MessageRetour(1) = "Certains fichiers ou dossiers sont en EXTRA (Absent de la source, mais présent dans la destination). " & _
 -             "Visualiser le fichier journal afin d'effectuer des opérations si nécessaire (sauf en cas de listage). "
 - T_MessageRetour(2) = "Certains fichiers ou dossiers sont en dissonance. Visualiser le fichier journal afin d'effectuer des opérations si nécessaire. "
 - 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). "
 - T_MessageRetour(4) = "Erreur sérieuse. Robocopy n'a copié aucun fichier. C'est une erreur d'utilisation de la commande " & _
 -             "ou une erreur due aux privilèges d'accès insuffisants sur les dossiers sources ou destinations. "
 - T_MessageRetour(5) = "Aucune erreur et aucune copie : les dossiers sources et destinations sont synchronisés. "
 - '------ MAIN ------
 - Do
 -     CmdeRobocopy = "ROBOCOPY"
 -     '------ CHOIX DE L'ACTION ------
 -     ChoixMenu = UCase(InputBox("Votre choix :" & Chr(10) & Chr(10) _
 -                 & "C) Copier des fichiers" & Chr(10) _
 -                 & "D) Déplacer des fichiers" & Chr(10) _
 -                 & "L) Lister des fichiers" & Chr(10) _
 -                 & "M) Synchroniser des fichiers (Mirroir)" & Chr(10) _
 -                 & "R) Répéter la dernière commande" & Chr(10) _
 -                 & Chr(10) & "Bouton [Annuler] ou [Entrée] sans valeur pour Quitter" _
 -                 ,"ROBOCOPY" ))
 -     Select Case ChoixMenu
 -         Case "C" '------ Copier des fichiers
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierDestination)
 -             CmdeRobocopy = CmdeRobocopy & SelectionFichier()
 -             CmdeRobocopy = CmdeRobocopy & ChoixDate()
 -             CmdeRobocopy = CmdeRobocopy & ChoixTaille()
 -             CmdeRobocopy = CmdeRobocopy & " /COPYALL /S /ZB" '------ Action a réaliser
 -             CmdeRobocopy = CmdeRobocopy & " /R:3 /W:60" '------ Nombre et délai pour une reprise de l'action en cas d'échec
 -             CmdeRobocopy = CmdeRobocopy & Journal()
 -             ExecuteCommande CmdeRobocopy
 -         Case "D" '------ Déplacer des fichiers
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierDestination)
 -             CmdeRobocopy = CmdeRobocopy & SelectionFichier()
 -             CmdeRobocopy = CmdeRobocopy & ChoixDate()
 -             CmdeRobocopy = CmdeRobocopy & ChoixTaille()
 -             CmdeRobocopy = CmdeRobocopy & " /COPYALL /S /ZB /MOVE" '------ Action a réaliser
 -             CmdeRobocopy = CmdeRobocopy & " /R:3 /W:60" '------ Nombre et délai pour une reprise de l'action en cas d'échec
 -             CmdeRobocopy = CmdeRobocopy & Journal()
 -             ExecuteCommande CmdeRobocopy
 -         Case "L" '------ Lister des fichiers
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
 -             CmdeRobocopy = CmdeRobocopy & " C:\" '------ Destination bidon car listage uniquement...
 -             CmdeRobocopy = CmdeRobocopy & SelectionFichier()
 -             CmdeRobocopy = CmdeRobocopy & ChoixDate()
 -             CmdeRobocopy = CmdeRobocopy & ChoixTaille()
 -             CmdeRobocopy = CmdeRobocopy & " /COPY:D /S /L /XX" '------ Action a réaliser
 -             CmdeRobocopy = CmdeRobocopy & " /R:0 /W:0" '------ Nombre et délai pour une reprise de l'action en cas d'échec
 -             CmdeRobocopy = CmdeRobocopy & Journal()
 -             ExecuteCommande CmdeRobocopy
 -         Case "M" '------ Synchroniser des fichiers (Mirroir)
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierSource)
 -             CmdeRobocopy = CmdeRobocopy & SelectionDossier(C_DossierDestination)
 -             CmdeRobocopy = CmdeRobocopy & " /COPYALL /E /ZB /MIR" '------ Action a réaliser
 -             CmdeRobocopy = CmdeRobocopy & " /R:3 /W:60" '------ Nombre et délai pour une reprise de l'action en cas d'échec
 -             CmdeRobocopy = CmdeRobocopy & Journal()
 -             ExecuteCommande CmdeRobocopy
 -         Case "R" '------ Répéter la dernière commande
 -             If fso.FileExists(C_FichierJournal) Then
 -                 ArchiveCommande CmdeRobocopy, C_Lecture
 -                 ExecuteCommande(CmdeRobocopy)
 -             Else
 -                 MsgBox "Commande Impossible : c:\robocopy.txt est introuvable...", vbOKOnly, "ROBOCOPY"
 -             End If
 -         Case "" '------ Quitter par le bouton [Annuler] ou [Entrée] sans valeur
 -             If MsgBox("Confirmation de l'abandon de l'utilitaire", vbYesNo + vbQuestion, "ROBOCOPY" ) = vbNo Then
 -                 ChoixMenu = "On ne quitte pas la procédure"
 -             End If
 -         Case Else
 -             MsgBox "Choix de menu incorrect...", vbOKOnly, "ROBOCOPY"
 -     End Select
 - Loop Until Len(ChoixMenu) = 0
 
  |       |