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

LaSourieD 4 Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention - 25 juil. 2017 à 09:28 - Dernière réponse : cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention
- 25 juil. 2017 à 17:49
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
Afficher la suite 
4Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention

7 réponses

Répondre au sujet
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 25 juil. 2017 à 14:54
+1
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_JMO
LaSourieD 4 Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention - Modifié par LaSourieD le 25/07/2017 à 15:04
0
Utile
5
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.
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 25 juil. 2017 à 15:25
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.
LaSourieD 4 Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 25 juil. 2017 à 15:29
Bonjour,

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

Cordialement,
LaSourieD.
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > LaSourieD 4 Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention - 25 juil. 2017 à 15:55
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
LaSourieD 4 Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention > cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 25 juil. 2017 à 16:33
Bonjour Jean-Marc,

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

Cordialement,
LaSourieD
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > LaSourieD 4 Messages postés mardi 25 juillet 2017Date d'inscription 25 juillet 2017 Dernière intervention - 25 juil. 2017 à 17:49
Si ça te convient, pense à mettre le sujet résolu.

Merci,
Commenter la réponse de LaSourieD

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.