Trie de fichier en fonction du nom de celui-ci [Résolu]

Signaler
Messages postés
4
Date d'inscription
mardi 25 juillet 2017
Statut
Membre
Dernière intervention
25 juillet 2017
-
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
Bonjour,
Je vous écris aujourd'hui sur le forum car je suis face à un problème. Je voulais d'abord coder en batch, mais il s'avère que cela n'est pas évident donc je voulais me porter vers le VBS. Je vous explique donc ce que je veux faire :

Le but final est d'archiver les fichiers compris entre la date de lancement du script et 6 mois avant le lancement du script Et de supprimer les fichiers plus vieux que 6mois. Les fichiers sont exprimés en fonction de la date par exemple : ..._ex170630.log (YYMMDD) & de supprimer les autres (donc vieux de plus de 6mois).
Prenons un exemple : Si on lançait le script aujourd'hui 17/07/25
Le fichier : ..._ex170630.log serait conserver tandis que
Le fichier : ..._ex170112.log serait supprimé.

Ma réflexion en batch a été la suivante :
- Mettre dans trois variables : L'année, le jour, le mois (YY/MM/DD) et créer une variable 'Date' de la forme YYMMDD
-Décrementer le mois de respectivement 6.
-Et écraser la variable date avec la nouvelle valeur
-Tester la variable avec les noms des fichiers .log (Si compris entre ajd & 6 mois ->Déplacer vers Archive Puis Archiver
Sinon Supprimer)

J'avoue ne pas savoir par où commencer en VBS car je ne sais pas du tout coder en cette langue.

Merci d'avance pour votre aide,

Cordialement,
LaSourieD

2 réponses

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Bonjour LaSourieD,

Exemple du script en vbs
Option Explicit

Const cstPath = "C:\Users\cs_JMO\Documents\SCRIPTS\"
Const cstExtension = "log"

Dim objFso, colFile
Set objFso = CreateObject("Scripting.FileSystemObject")

For Each colFile in objFso.GetFolder(cstPath).Files 
   If LCase(objFso.GetExtensionName(colFile)) = cstExtension Then
      Dim strSplitDate
      strSplitDate = Right(Split(colFile,".")(UBound(Split(colFile,"."))-1),6)
      If IsNumeric(strSplitDate) Then CheckFile colFile, strSplitDate
   End if
Next


Sub CheckFile(colFile, strSplitDate)
   Dim dtDeb, dtFin, dtDiff 
   dtDeb = Right(Date,4) & "/" & Mid(Date,4,2) & "/" & Left(Date,2)
   dtFin = Left(Year(Date),2) & Left(strSplitDate, 2) & "/" & Mid(strSplitDate,3,2) & "/" & Right(strSplitDate,2)
   dtDiff = DateDiff("m" , dtFin , dtDeb)
          
   Select Case dtDiff
      Case 0,1,2,3,4,5
         MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _ 
                "< 6 mois -> A conserver" & vbCrLf & dtDiff & " mois",,"Case 0,1,2,3,4,5"
      
      Case  6  
         If Right(dtDeb, 2) >= Right(dtFin, 2) Then
            MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _ 
                   "6 mois -> A supprimer",,"Case 6"
         Else
            MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _  
                   "6 mois -> A conserver",,"Case 6"
         End If

      Case Else
            MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _ 
                   "> 6 mois -> A supprimer" & vbCrLf & dtDiff & " mois",,"Case Else"
   End Select   
End Sub

Change le chemin de la constante cstPath et teste !!!

jean-marc
Messages postés
4
Date d'inscription
mardi 25 juillet 2017
Statut
Membre
Dernière intervention
25 juillet 2017

Bonjour Jean-Marc,

Après avoir testé ton script (qui est génial au passage) j'aimerais savoir si il était possible d'archiver en plus en vbs et de supprimer directement après avoir affiché le message "A supprimer"?

Merci d'avance & merci encore,
Cordialement,
LaSourieD.
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
Pour l'archivage, est-ce le même chemin + "\Archiv" ???
Je regarde en fin de journée pour te mettre le movefile et le deletefile.
Messages postés
4
Date d'inscription
mardi 25 juillet 2017
Statut
Membre
Dernière intervention
25 juillet 2017
>
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018

Bonjour,

Il s'avère que j'aimerais compresser en .zip/.rar directement le dossier qui contiendra tout les fichiers archivables.

Cordialement,
LaSourieD.
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26 >
Messages postés
4
Date d'inscription
mardi 25 juillet 2017
Statut
Membre
Dernière intervention
25 juillet 2017

Option Explicit

Const cstPath = "C:\Users\603161764\Documents\SCRIPTS\"
Const cstPathArchiv = "Archiv\"
Const cstExtension = "log"

Dim objFso, colFile, f
Set objFso = CreateObject("Scripting.FileSystemObject")

If Not objFso.FolderExists(cstPath & cstPathArchiv) Then
objFso.CreateFolder(cstPath & cstPathArchiv)
End If


For Each colFile in objFso.GetFolder(cstPath).Files
If LCase(objFso.GetExtensionName(colFile)) = cstExtension Then
Dim strSplitDate
strSplitDate = Right(Split(colFile,".")(UBound(Split(colFile,"."))-1),6)
If IsNumeric(strSplitDate) Then CheckFile colFile, strSplitDate
End if
Next


Sub CheckFile(colFile, strSplitDate)
Dim dtDeb, dtFin, dtDiff
dtDeb = Right(Date,4) & "/" & Mid(Date,4,2) & "/" & Left(Date,2)
dtFin = Left(Year(Date),2) & Left(strSplitDate, 2) & "/" & Mid(strSplitDate,3,2) & "/" & Right(strSplitDate,2)
dtDiff = DateDiff("m" , dtFin , dtDeb)

Select Case dtDiff
Case 0,1,2,3,4,5
MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _
"< 6 mois -> A conserver" & vbCrLf & dtDiff & " mois",,"Case 0,1,2,3,4,5"
objFso.MoveFile colFile, cstPath & cstPathArchiv

Case 6
If Right(dtDeb, 2) >= Right(dtFin, 2) Then
MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _
"6 mois -> A supprimer",,"Case 6"
objFso.DeleteFile colFile
Else
MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _
"6 mois -> A conserver",,"Case 6"
objFso.MoveFile colFile, cstPath & cstPathArchiv
End If

Case Else
MsgBox colFile & vbCrLf & colFile.Name & vbCrLf & strSplitDate & vbCrLf & vbCrLf & _
"> 6 mois -> A supprimer" & vbCrLf & dtDiff & " mois",,"Case Else"
objFso.DeleteFile colFile
End Select
End Sub

Delete et move ajoutés.
Pour le zip, je ne sais pas faire en vbs.

jean-marc
Messages postés
4
Date d'inscription
mardi 25 juillet 2017
Statut
Membre
Dernière intervention
25 juillet 2017
>
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018

Bonjour Jean-Marc,

Je tiens énormément à vous remercier !!! Vous êtes génial.
Le problème est réglé.

Cordialement,
LaSourieD
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26 >
Messages postés
4
Date d'inscription
mardi 25 juillet 2017
Statut
Membre
Dernière intervention
25 juillet 2017

Si ça te convient, pense à mettre le sujet résolu.

Merci,