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

Résolu
zéèf -  
 zéèf -
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. Utilisateur anonyme
     
    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
  2. zéèf
     
    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
  3. Utilisateur anonyme
     
    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
  4. zéèf
     
    Ok, mais j'ai essayé votre script et malheureusement je n'obtient pas le résultat escompté.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
  7. zéèf
     
    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
  8. Utilisateur anonyme
     
    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
  9. zéèf
     
    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
  10. Utilisateur anonyme
     
    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