Dji-Pih | flashy_fiber a écrit :
J'ai l'intention de faire du tri sur un serveurs de fichiers afin d'optimiser l'espace disque et je recherche un freeware permettant de faire des recherches de fichiers selon criteres (Taille en Mo, Date d'ancienneté, Modification, Derniers accès...etc...). Voilà si vous avez des outils en freeware à conseiller, merci d'avance
|
Voici le VBScript que j'utilise (donc testé...) avec ROBOCOPY Version XP010 pour lister, copier, déplacer et synchroniser des fichiers sur mon serveur : 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
| |