Trie de fichier en fonction du nom de celui-ci

Résolu
LaSourieD Messages postés 4 Date d'inscription mardi 25 juillet 2017 Statut Membre Dernière intervention 25 juillet 2017 - 25 juil. 2017 à 09:28
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 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

2 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
25 juil. 2017 à 14:54
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
1
LaSourieD Messages postés 4 Date d'inscription mardi 25 juillet 2017 Statut Membre Dernière intervention 25 juillet 2017
Modifié le 25 juil. 2017 à 15:04
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.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
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.
0
LaSourieD Messages postés 4 Date d'inscription mardi 25 juillet 2017 Statut Membre Dernière intervention 25 juillet 2017 > cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018
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.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > LaSourieD Messages postés 4 Date d'inscription mardi 25 juillet 2017 Statut Membre Dernière intervention 25 juillet 2017
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
0
LaSourieD Messages postés 4 Date d'inscription mardi 25 juillet 2017 Statut Membre Dernière intervention 25 juillet 2017 > cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27 > LaSourieD Messages postés 4 Date d'inscription mardi 25 juillet 2017 Statut Membre Dernière intervention 25 juillet 2017
25 juil. 2017 à 17:49
Si ça te convient, pense à mettre le sujet résolu.

Merci,
0
Rejoignez-nous