Aide pour la création d'un script svp !

Résolu
Bonjour,

Je cherche à crée un script sous windows, que j'exécuterai 1 fois par mois à l'aide d'une tâche planifié.
Ce script doit pouvoir supprimer des dossier dont les noms (sous forme de date, par exemple: 10-08-2010) sont ancien de plus de 10 jours.

Je ne sais pas si tout est clair, j'aimerai avoir quelques pistes pour réaliser ce script.

Merci.

10 réponses

  1. Bonjour,

    Il te faudra adapter selon ton besoin :

    Exemple type :

      Const RepSource = "C:\Data"
        
      Dim objFSO, objFichier, objRepertoire
      Dim lDate, strDate, Mois, Jour
    
      lDate = DateAdd("Y", -10, Date)
    
      Mois = Month(lDate)
      If (Mois < 10) Then
        Mois = "0" & Mois
      End If
    
      Jour = Day(lDate)
      If (Jour < 10) Then
        Jour = "0" & Jour
      End If
      strDate = Jour & "-" & Mois & "-" & Year(lDate)
    
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objRepertoire = objFSO.GetFolder(RepSource)
    
      ' Destruction des anciens fichiers
      If (objRepertoire.Files.Count > 0) Then
        For Each objFichier In objRepertoire.Files
          ' Récupère le nom du fichier
          NomF = objFichier.Name
          ' Récupère la date dans le nom du fichier
          NomF = Mid$(NomF, 1, 8)
          ' Test si date < 10 jrs
          If (NomF < strDate) Then
                objFSO.DeleteFile (RepSource & "\" & objFichier.Name)
          End If
        Next
      End If
    
      Set objFSO = Nothing
      Set objRepertoire = Nothing
      Set objFichier = Nothing
    
    WScript.Quit(0)
    


    Cdt

    Lupin
    0
    1. merci pour votre réponse, mais pour l'instant j'avais plus un truc du genre :

      set /a %%jour%%= %%date:~0,2%%>> purgelog.bat
      echo. >> purgelog.bat

      echo. >> purgelog.bat
      IF %%jour%%==01 set jour=20>> purgelog.bat

      IF %%jour%%==02 set jour=21>> purgelog.bat

      IF %%jour%%==03 set jour=22>> purgelog.bat

      IF %%jour%%==04 set jour=23>> purgelog.bat
      IF %%jour%%==05 set jour=24>> purgelog.bat

      IF %%jour%%==06 set jour=25>> purgelog.bat

      IF %%jour%%==07 set jour=26>> purgelog.bat

      IF %%jour%%==08 set jour=27>> purgelog.bat

      IF %%jour%%==09 set jour=28>> purgelog.bat

      IF %%jour%%==10 set jour=29>> purgelog.bat

      IF %%jour%%==11 set jour=30>> purgelog.bat

      IF %%jour%%==12 set jour=31>> purgelog.bat

      IF %%jour%%==13 set jour=01>> purgelog.bat
      IF %%jour%%==14 set jour=02>> purgelog.bat
      IF %%jour%%==15 set jour=03>> purgelog.bat
      IF %%jour%%==16 set jour=04>> purgelog.bat
      IF %%jour%%==17 set jour=05>> purgelog.bat

      IF %%jour%%==18 set jour=06>> purgelog.bat
      IF %%jour%%==19 set jour=07>> purgelog.bat

      IF %%jour%%==20 set jour=08>> purgelog.bat

      IF %%jour%%==21 set jour=09>> purgelog.bat

      IF %%jour%%==22 set jour=10>> purgelog.bat

      IF %%jour%%==23 set jour=11>> purgelog.bat

      IF %%jour%%==24 set jour=12>> purgelog.bat

      IF %%jour%%==25 set jour=13>> purgelog.bat

      IF %%jour%%==26 set jour=14>> purgelog.bat

      IF %%jour%%==27 set jour=15>> purgelog.bat

      IF %%jour%%==28 set jour=16>> purgelog.bat

      IF %%jour%%==29 set jour=17>> purgelog.bat

      IF %%jour%%==30 set jour=18>> purgelog.bat

      IF %%jour%%==31 set jour=19>> purgelog.bat

      echo %jour%
      echo. >> purgelog.bat

      echo. >> purgelog.bat

      PAUSE

      rmdir C:\dossiertest\%%jour%%-??-2011 /Q /S

      PAUSE

      exit

      Apparement ça n'a rien a voir. Votre script semble plus complexe, n'y a t'il pas moyen d'arriver à quelque chose avec le bout de script ci dessus ?
      0
      1. re:

        Désolé, il y a for longtemps que j'ai abandonné les fichiers en lots
        (batch files), je prônes plutôt l'utilisation du VBS (Visual Basic Scripting).

        À mon humble avis, le VBS est beaucoup plus flexible que les fichiers en lots.

        Cdt

        Lupin
        0
        1. Ok, mais j'ai essayé votre script et malheureusement je n'obtient pas le résultat escompté.
          0
          1. re:

            Si je comprends bien, tu n'as aucune connaissance en VBS ?

            Il faut connaître la nomenclature exact du nom de fichier afin
            d'y repérer la date selon le format spécifié.

            1.) L'instruction [ strDate = Jour & "-" & Mois & "-" & Year(lDate) ]
            définit le critère de recherche.

            Est-ce bien le format recherche ?

            Jour - Mois - Année
            ( 10-08-2010 ) -> Selon tes spécifications

            2.) L'instruction [ NomF = Mid$(NomF, 1, 8) ]
            capture le format de la Date dans le nom du fichier

            NomF -> Nom du fichier par l'affectation [ NomF = objFichier.Name ]

            Mid$(NomF, 1, 8)

            Mid$("NomFichier","A partir du premier caractère","8 caractère de long")

            -----------------------------

            Posons que le nom du fichier est :

            Position du caractère
            12345678901234567890123
            Donnee-10-08-2010-Août.txt
            _______8

            Pour en récupérer la date tu remplace l'instruction par :

            NomF = Mid$(NomF, 8, 10)

            Est-ce clair pour toi ?

            Cdt

            Lupin
            0
            1. non je n'ai pas de bases en VBS mais j'ai compris l'instruction NomF.

              L'élément que j'essai de supprimer est un répertoire, nommé par exemple 01-10-2011, donc de la même forme que dans votre exemple.
              0
              1. re:

                Je suis mal barré, j'ai lu trop vite ton devis :-(

                J'avais compris [ Fichiers ], après relecture je constate
                qu'il s'agit de [ Dossiers ].

                Voic donc le script modifié et testé :

                Faire une copie de protection des répertoires avant l'utilisation :

                Modifie la Constante [ RepSource ] selon ton environnement.

                Place le script dans le dossier [ RepSource ].

                  Const RepSource = "C:\Document\Test" 
                     
                  Dim objFSO, objDossier, objRepertoire 
                  Dim lDate, strDate, Mois, Jour, NomD, NomRechercher 
                
                  lDate = DateAdd("Y", -10, Date) 
                
                  Mois = Month(lDate) 
                  If (Mois < 10) Then 
                    Mois = "0" & Mois 
                  End If 
                  Jour = Day(lDate) 
                  If (Jour < 10) Then 
                    Jour = "0" & Jour 
                  End If 
                  strDate = Year(lDate) & Mois & Jour 
                
                  Set objFSO = CreateObject("Scripting.FileSystemObject") 
                  Set objRepertoire = objFSO.GetFolder(RepSource) 
                
                  For Each objDossier In objRepertoire.SubFolders 
                    NomD = objDossier.Name 
                    NomRechercher = Mid(NomD, 7, 4) & Mid(NomD, 4, 2) & Mid(NomD, 1, 2) 
                    If (NomRechercher < strDate) Then 
                        objDossier.Delete 
                    End If 
                  Next 
                
                  Set objFSO = Nothing 
                  Set objRepertoire = Nothing 
                
                WScript.Echo("Traitement terminé") 
                
                WScript.Quit(0) 
                


                Cdt

                Lupin
                0
                1. Ouaou, c'est impressionnant ça marche parfaitement ! Les actions que je voulais exécuter sont toutes réussies.
                  Je vous remercie beaucoup du temps que vous m'avez consacré !
                  Une dernière question cependant, je n'ai pas saisi comment fonctionnait cette ligne:

                  Mid(NomD, 7, 4) & Mid(NomD, 4, 2) & Mid(NomD, 1, 2)

                  Pouvez vous me dire comment fonctionnent les chiffres ?
                  0
                  1. re:

                    Mid(NomD, 7, 4) & Mid(NomD, 4, 2) & Mid(NomD, 1, 2)

                    On trouve ici une concaténation de trois parties :

                    L'année :

                    Mid(NomD, 7, 4)

                    Dans la chaine de caractère NomD, prend à partir du 7ième
                    caractère 4 caractères.

                    Le mois :

                    Mid(NomD, 4, 2)

                    Dans la chaine de caractère NomD, prend à partir du 4ième
                    caractère 2 caractères.

                    Le Jour :

                    Mid(NomD, 1, 2)

                    Dans la chaine de caractère NomD, prend à partir du 1er
                    caractère 2 caractères.

                    Et enfin, l'éperluète ( & ) permet la concaténation.

                    Pour obtenir un ordre conséquent, il faut fournir les deux
                    format de Date en String ( strDate et NomF) sous la forme :

                    AAAAMMJJ

                    Autrement, lors du test ( If (NomRechercher < strDate) Then )

                    celui-ci ne se comporte pas comme voulu :

                    Ex. : If ( 10082010 < 03102011 ) Then

                    On voit bien que le première date est plus petite que la deuxième :

                    10-08-2010 est plus petit que 03-10-2011

                    Mais le test sur un type ( String ) produit que le premier caractère
                    de la première date est un ( 1 ) et le premier caractère de la deuxième
                    date est un ( 0 ), alors

                    10082010 est plus grand que 03102011.

                    d'où le remaniement de la Date sous forme de ( String ).

                    Cdt

                    Lupin
                    0