Suppression de fichiers en fonction d'une date.

Suppression de fichiers en fonction d'une date. - Logiciels - Windows & Software

Marsh Posté le 09-03-2006 à 18:56:12    

Je cherche un logiciel ou équivalent qui permet de supprimer le contenu d'un répertoire vieux de X jours par rapport à la date du système.
X jours étant variable selon la volonté de l'utilisateur.
 
Avez-vous une idée pour moi ?

Reply

Marsh Posté le 09-03-2006 à 18:56:12   

Reply

Marsh Posté le 09-03-2006 à 19:01:12    

en logiciel, je ne sais pas. Par contre j'avais fait un script qui faisait ca pour un boulot. Si ca t'interesse je peux te poster les sources.

Reply

Marsh Posté le 09-03-2006 à 19:21:00    

ccp6128 a écrit :

en logiciel, je ne sais pas. Par contre j'avais fait un script qui faisait ca pour un boulot. Si ca t'interesse je peux te poster les sources.


 
Ah oui je veux bien.
 :jap:  
 
Je t'envoi mon mail en mp

Reply

Marsh Posté le 09-03-2006 à 19:47:59    

Pareil, j'ai fait celà pour nettoyer le dossier "echanges" du serveur d'un de mes clients (un endroit ou chacun peut mettre pendant maxi 15 jours ce qu'il souhaite) ! C'est un script en VBScript (donc suffit de copier-coller dans un fichier texte avec l'extension *.vbs) et il est planifié chaque jour via les Tâches planifiées de Windows. A la fin un email est envoyé dans le dossier publique Exchange avec un rapport :
 

'
' Customer  : -
' Filename  : cleanfiles.vbs
' Author    : Cédric Rathgeb
' Date      : 2005-08-08
' Version   : 1.1
' Copyright : Public Domain
' Warranty  : None
'  
 
'On Error Resume Next
 
sPath = "D:\Fichiers\Commun\Echanges\"
sOlderThanDays = 15
sReportFiles = "Les fichiers suivants ont été nettoyés : " & vbCrLf
sReportFilesCount = 0
sReportFolders = "Les dossiers suivants ont été nettoyés : " & vbCrLf
sReportFoldersCount = 0
 
' Compute old date
dOldDate = dateadd("d", 0 - sOlderThanDays, Now())
 
' Get base folder
Set oFSO = CreateObject("Scripting.FileSystemObject" )
 
Sub CleanFolder(sCurrentPath)
   ' select current folder
   Set oFolder = oFSO.GetFolder(sCurrentPath)  
 
   ' Get subfolders
   Set oSubFolders = oFolder.SubFolders
 
   ' Do a recursive call if it contains subfolders
   For Each oCurrentFolder in oSubFolders
      CleanFolder oCurrentFolder.Path
   Next  
   
   ' Get files in current folder
   Set oFiles = oFolder.Files
 
   ' Delete old Files
   For Each oCurrentFile in oFiles
      If oCurrentFile.DateCreated < dOldDate AND _
         oCurrentFile.DateLastAccessed < dOldDate AND _
         oCurrentFile.DateLastModified < dOldDate Then
         sReportFiles = sReportFiles & " - " & oCurrentFile.Path & "\" & oCurrentFile.Name & vbCrLf
         oCurrentFile.Delete True
         sReportFilesCount = sReportFilesCount + 1
      End If
   Next
 
   Set oFiles = oFolder.Files
   If oFiles.Count = 0 AND oFolder.Path & "\" <> sPath Then
      sReportFolders = sReportFolders & " - " & oFolder.Path & "\" & vbCrLf
      oFolder.Delete True
      sReportFoldersCount = sReportFoldersCount + 1
   End If
 
End Sub
 
Sub SendMailCDO(aTo, Subject, TextBody, aFrom)
  Const cdoOutlookExvbsss = 2
  Const cdoIIS = 1
   
  Dim Message ' As New CDO.Message
   
  'Create CDO message object
  Set Message = CreateObject("CDO.Message" )
  With Message
    'Load IIS configuration
    .Configuration.Load cdoIIS
     
    'Set email adress, subject And body
    .To = aTo
    .Subject = Subject
    .TextBody = TextBody
     
    'Set sender address If specified.
    If Len(aFrom) > 0 Then
       .From = aFrom
    End If
     
    'Send the message
    .Send
  End With
End Sub
 
' Call clean function
CleanFolder sPath
 
' do a report
sReport = "Rapport de nettoyage du " & now() & vbCrLf
sreport = sReport & "---------------------------------------" & vbCrLf
sReport = sReport & "Nombre de fichiers nettoyés : " & sReportFilesCount & vbCrlf
sReport = sReport & "Nombre de dossiers nettoyés : " & sReportFoldersCount & vbCrLf
sReport = sReport & "---------------------------------------" & vbCrLf
sReport = sReport & sReportFiles
sReport = sReport & "---------------------------------------" & vbCrLf
sReport = sReport & sReportFolders
sReport = sReport & "---------------------------------------" & vbCrLf
 
' send report by email
SendMailCDO "utilisation@domain.local", "Nettoyage des fichiers du dossier Echanges", sReport, "adm@domain.local"

Reply

Marsh Posté le 09-03-2006 à 19:53:21    

Je vois que je suis loin d'etre le seul a utiliser ce genre de scripts alors.
 
le script qui suit est simple et se contente de supprimer les fichiers d'un repertoire en se basant sur la date de derniere modification. Il me servait pour nettoyer un repertoire qui recevait des fichiers de backup.
 


'Les declarations
 
 
'Repertoire ou sont stockes les fichiers
DossierSauvegarde = "C:\TEST\"
 
'Nombre de jours de conservation des Fichiers
AgeMaximalFichiers = "30"
 
'Comptage des fichiers effaces
NbFichiersEffaces = 0
 
'Initialisation des objets
Set fso = CreateObject("Scripting.FileSystemObject" )
 
'On verifie que le repertoire de sauvegarde existe
If (myName = Winrep = fso.FolderExists(DossierSauvegarde)) = False Then
    Erreur = MsgBox("Le dossier de sauvegarde est introuvable !" )
    Wscript.Quit
End If
 
'On recupere la date système
DateSysteme = Date
 
'Suppression des fichiers trop anciens
 
Set Folder = fso.Getfolder(DossierSauvegarde)
For Each File In Folder.Files
        If (DateDiff("d", File.DateLastModified, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            'On verifie qu'ils ne sont pas en lecture seule
            If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
            NbFichiersEffaces = NbFichiersEffaces + 1
        End If
Next
 
'On affiche un joli message
MsgBox (Cstr(NbFichiersEffaces) + " fichiers ont ete effaces" )

Reply

Marsh Posté le 09-03-2006 à 20:37:29    

ccp6128 a écrit :

Je vois que je suis loin ... fichiers ont ete effaces" )
[/fixed]


 
Tout d'abord un grand et sincère merci à toi ccp6128 pour ton mail et ton script, ça marche niquel  :sol:  
Si je voulais y voir un défaut et chipoter, je dirait qu'il manque seulement un rapport au début qui liste les fichiers à supprimer, et un autre à la fin du script de manière à lister les fichiers supprimés.
 
 
On peut imaginer que le 1er rapport serait envoyé à un groupe de salariés d'une entreprise 2 jours avant la suppression des fichiers, le temps que les personnes lisent les fichiers qui vont être supprimés et se prononcent si besoin. Là ça serait le pied.
 
Requin: je teste ton script

Reply

Marsh Posté le 09-03-2006 à 20:48:24    

Bah il fait peu ou prou la même chose... il y a juste une fonction sendmailCDO pour envoyer via CDO (c'est supporté sous 2000, XP et 2003) un email de rapport au lieu de sortir dans une MsgBox.
 
En faite pour faire un rapport avant, il suffit de copier le code et d'ôter le oCurrentFile.Delete et oFolder.Delete qui effacent respectivement le fichier et répertoire... de changer le nombre de jours (par exemple J-2 jours)  et de modifier un peu les textes pour que ce soit plus un avertissement.

Reply

Marsh Posté le 09-03-2006 à 20:54:04    

Requin a écrit :

Pareil, j'ai fait ... Echanges", sReport, "adm@domain.local"
[/fixed]


 
Donc, je viens de le tester, l'envoi de mail fonctionne bien, mais les fichiers ne sont pas effacés.
J'ai modifier 2 lignes dans ton programme pour qu'il fonctionne sur mon PC:

Code :
  1. sPath = "C:\TEST"
  2. sOlderThanDays = 1


 
J'ai un fichier qui a ces propriétés:
Créé le: samedi 4 mars 2006, 00:32:46
Modifié le : mardi 21 février 2006, 20:50:12
Dernier accès: jeudi 9 mars 2006, 20:50:59
 
Peux tu m'aider stp, je connait pas grand chose en vbs.
 
Sinon, supposons que mon répertoire c:\TEST requiert une identification de login et mot de passe, comment intégrer cela dans ton programme ?
 
:jap:
 

Reply

Marsh Posté le 09-03-2006 à 20:56:31    

Requin a écrit :

Bah il fait peu ou prou la même chose... il y a juste une fonction sendmailCDO pour envoyer via CDO (c'est supporté sous 2000, XP et 2003) un email de rapport au lieu de sortir dans une MsgBox.
 
En faite pour faire un rapport avant, il suffit de copier le code et d'ôter le oCurrentFile.Delete et oFolder.Delete qui effacent respectivement le fichier et répertoire... de changer le nombre de jours (par exemple J-2 jours)  et de modifier un peu les textes pour que ce soit plus un avertissement.


 
 
J'ai l'impression que ton programme supprime les fichiers vieux de X jours mais que le compteur compte à partir de la dernière modification du fichier (moi ça me convient), mais peut-être que certains voudront par rapport à la date de création du fichier ?


Message édité par alandon le 09-03-2006 à 20:56:53
Reply

Marsh Posté le 09-03-2006 à 21:03:32    

Le script de Requin se base sur les 3 dates dans les proprietes du fichier.
 
En fait voici la correspondance :
 
oCurrentFile.DateCreated --> Créé le
oCurrentFile.DateLastAccessed --> Dernier accès
oCurrentFile.DateLastModified --> Modifié le
 
ce qui explique que le fichier n'aie pas ete supprime.
 
Mon script se base juste sur la date de derniere modification

Reply

Marsh Posté le 09-03-2006 à 21:03:32   

Reply

Marsh Posté le 09-03-2006 à 21:08:06    

alandon a écrit :


Sinon, supposons que mon répertoire c:\TEST requiert une identification de login et mot de passe, comment intégrer cela dans ton programme ?
 
:jap:


 
Tu veux probablement parler d'un dossier partage.
Dans ce cas 2 solutions : soit tu montes prealablement ce dossier dans un disque (genre automatiquement a chaque demarrage) ce qui evite le probleme. Soit il te faut le monter en vbs, ce qui est tres probablement possible bien que je n'aie pas le code sous la main.

Reply

Marsh Posté le 09-03-2006 à 21:19:37    

ccp6128 a écrit :

Tu veux probablement parler d'un dossier partage.
Dans ce cas 2 solutions : soit tu montes prealablement ce dossier dans un disque (genre automatiquement a chaque demarrage) ce qui evite le probleme. Soit il te faut le monter en vbs, ce qui est tres probablement possible bien que je n'aie pas le code sous la main.


 
Oui
domage que tu n'ai pas le code pour le login et mot de passe. je vais essayer de chercher.
Merci pour tout.

Reply

Marsh Posté le 09-03-2006 à 21:41:35    

Ah, j'ai trouve.
 
C'est l'objet WSHNetwork.MapNetworkDrive.
 
Il s'utilise de la facon suivante :
 
WshNetwork.MapNetworkDrive strLocalName,strRemoteName,[bUpdateProfile], [strUser],[strPassword]  
 
Les parametres sont les suivants :
 
strLocalName : Lettre d'unite qui sera affectee
strRemoteName : Chemin du partage reseau
[bUpdateProfile] : Si tu mets cette valeur a TRUE, le mappage sera sauvegarde dans le profil utilisateur et relance au demarrage
[strUser] : nom d'utilisateur
[strPassword] : mot de passe.
 
Exemple d'utilisation
 


Set WSHNetwork = WScript.CreateObject("WScript.Network" )
 
 
WSHNetwork.MapNetworkDrive "K:", "\\TEST\Partage", FALSE, "toto","1234"  

Reply

Marsh Posté le 09-03-2006 à 21:47:49    

ccp6128 a écrit :

Ah, j'ai trouve.
 
C'est l'objet WSHNetwork.MapNetworkDrive.
 
Il s'utilise de la facon suivante :
 
WshNetwork.MapNetworkDrive strLocalName,strRemoteName,[bUpdateProfile], [strUser],[strPassword]  
 
Les parametres sont les suivants :
 
strLocalName : Lettre d'unite qui sera affectee
strRemoteName : Chemin du partage reseau
[bUpdateProfile] : Si tu mets cette valeur a TRUE, le mappage sera sauvegarde dans le profil utilisateur et relance au demarrage
[strUser] : nom d'utilisateur
[strPassword] : mot de passe.
 
Exemple d'utilisation
 


Set WSHNetwork = WScript.CreateObject("WScript.Network" )
 
 
WSHNetwork.MapNetworkDrive "K:", "\\TEST\Partage", FALSE, "toto","1234"  



 
 
génial que t'ai trouvé, par contre je peux pas tester ce soir, mais j'ai une question, tu en fais quoi de :
strLocalName,strRemoteName,[bUpdateProfile], [strUser],[strPassword]
 
 :??:


Message édité par alandon le 09-03-2006 à 23:12:04
Reply

Marsh Posté le 09-03-2006 à 21:53:25    

ce sont les noms des parametres. Je les ai remplaces par des valeurs concretes dans mon exemple :
 
strLocalName : K:
strRemoteName : \\TEST\Partage
[bUpdateProfile] : FALSE
[strUser] : toto
[strPassword] : 1234
 
La ligne avec "Set ..." sert a instancier l'objet (ne se fait qu'une seule fois). Apres tu peux utiliser WSHNetwork.MapNetworkDrive autant de fois que tu veux.
 
Edit - Les parametres ayant des noms entre crochets sont optionnels.

Message cité 1 fois
Message édité par ccp6128 le 09-03-2006 à 21:54:33
Reply

Marsh Posté le 09-03-2006 à 23:00:33    

ccp6128 a écrit :

ce sont les noms des parametres. Je les ai remplaces par des valeurs concretes dans mon exemple :
 
strLocalName : K:
strRemoteName : \\TEST\Partage
[bUpdateProfile] : FALSE
[strUser] : toto
[strPassword] : 1234
 
La ligne avec "Set ..." sert a instancier l'objet (ne se fait qu'une seule fois). Apres tu peux utiliser WSHNetwork.MapNetworkDrive autant de fois que tu veux.
 
Edit - Les parametres ayant des noms entre crochets sont optionnels.


 
 
Ah ok, je croyais que c'était des variables  ;)
 
Edit: Là je suis en week end   :sol:  ,je teste tout ça lundi et je reviendrais poster si j'ai des problèmes. :hello:  

Message cité 1 fois
Message édité par alandon le 09-03-2006 à 23:02:28
Reply

Marsh Posté le 15-03-2006 à 13:36:44    

alandon a écrit :

Ah ok, je croyais que c'était des variables  ;)
 
Edit: Là je suis en week end   :sol:  ,je teste tout ça lundi et je reviendrais poster si j'ai des problèmes. :hello:


 
Bon voilà j'ai testé, j'ai viré la ligne: sPath = "D:\Fichiers\Commun\Echanges\"
et je l'ai remplacé par ça: Set WSHNetwork = WScript.CreateObject("WScript.Network" )  
WSHNetwork.MapNetworkDrive "N:", "\\serveur\Share\echange\Codecs", FALSE, "toto","1234"
 
J'ai rien changé d'autres, mais lorsque j'exécute mon script voici le message que j'ai:  
code: 800704C3
Source: WSHNetwork.MapnetworkDrivre.


Message édité par alandon le 15-03-2006 à 17:25:30
Reply

Marsh Posté le 15-03-2006 à 16:54:21    

Tu ne peux pas virer sPath...
 
Les lignes dans ton cas pourraient être :

Set WSHNetwork = WScript.CreateObject("WScript.Network" )  
WSHNetwork.MapNetworkDrive "N:", "\\serveur\Share\", FALSE, "toto", "1234"
sPath = "N:\Echange\Codecs\"


 
En supposant que ton serveur s'appelle effectivement "serveur" et que ton partage s'appelle effectivement "Share" (ce dont je doute)

Message cité 1 fois
Message édité par Requin le 15-03-2006 à 17:42:22
Reply

Marsh Posté le 15-03-2006 à 17:31:37    

:jap:


Message édité par alandon le 15-03-2006 à 17:32:00
Reply

Marsh Posté le 21-03-2006 à 10:14:36    

Requin a écrit :

Tu ne peux pas virer sPath...
 
Les lignes dans ton cas pourraient être :

Set WSHNetwork = WScript.CreateObject("WScript.Network" )  
WSHNetwork.MapNetworkDrive "N:", "\\serveur\Share\", FALSE, "toto", "1234"
sPath = "N:\Echange\Codecs\"


 
En supposant que ton serveur s'appelle effectivement "serveur" et que ton partage s'appelle effectivement "Share" (ce dont je doute)


 
 
J'ai 2 petite questions: l
 
1ère:
Lorsque j'exécute mon script, il supprime bien mes fichiers anciens, mais ne m'envoie pas de rapport par mail, j'ai d'ailleurs un message qui apparait à la fin de l'exécution du script:

Code :
  1. script: c:\documents and settings\toto\bureau\script.vbs
  2. ligne: 86
  3. caract. :5
  4. Erreur: Le transport a échoué dans sa connexion au serveur
  5. Code: 80040213
  6. Source: CDO.Message.1.


 
Je pense que cela vient du fait que ma messagerie est Microsoft outlook et non outlook express.
 
 
2ème question: sur mon PC du boulot, lorsque je lance le script par un double clique, le script se lance dans une sorte de commande dos (l'invite de commande), et le message d'erreur que j'ai, n'apparait pas; mais les fichiers sont quand même supprimés.
Et si je fais un clique droit sur le fichier->ouvrir, là ça fonctionne comme sur mon PC Home et j'ai bien le message d'erreur qui apparaît.
 
 
Comment faire pour y remédier ?
 
Merci beaucoup

Reply

Marsh Posté le 21-03-2006 à 18:10:37    

CDO n'est pas forcément disponible sur toutes les plateformes... perso il s'agit d'un serveur Windows 2003.
 
Il existe sinon jmail comem composant qui fonctionne bien et est gratuit :
http://www.dimac.net/Products/w3JMail/start.htm

Reply

Marsh Posté le 21-03-2006 à 18:49:35    

j'ai pas tout capté là

Reply

Marsh Posté le 21-03-2006 à 20:16:15    

Pour envoyer un email, le script fait appel à un composant COM. Cs composants peuvent soit être fournis avec le système d'exploitation, soit avec un logiciel, soit encore par des éditeurs tiers.
 
CDO et fourni avec Windows 2003, mais certains OS n'ont pas ce composant et conclusion quand tu demande créer un objet, il ne trouve pas comment le faire.
 
Au lieu d'utiliser CDO, je t'ai proposé d'utiliser jMail qui est un composant programmé par un éditeur tiers et qui te permettera d'envoyer un email depuis ton script (il y a des exemples sur le site dimac)

Reply

Marsh Posté le 21-03-2006 à 21:03:56    

Mouais, bon bah je vais essayé sans grande conviction car je m'y connais pas du tout en prog.

Reply

Marsh Posté le 21-03-2006 à 22:42:00    

Ce sera l'occasion d'en connaître un peu plus... regarde les exemples du site de dimac, télécharge aussi la référence.

Reply

Marsh Posté le 09-04-2006 à 13:51:27    

J'ai un petit souci avec le programme de ccp6128, il ne supprime pas les fichiers à l'intérieur d'un répertoire, je m'explique:
 
Si je veux que mon programme supprime les fichiers du répertoire :
D:\Fichiers\Commun\Echanges\
alors je mets cette ligne: sPath = "D:\Fichiers\Commun\Echanges\"  
 
Mais si j'ai d'autres répertoires dans D\Fichiers\Commun\Echanges\ du genre D:\Fichiers\Commun\Echanges\infos, alors le programme n'ira pas vérifier dans D:\Fichiers\Commun\Echanges\infos, il ne visualise qu'à la racine.
 
Comment faire pour qu'il aille également visiter les répertoires dans l'arborescense que je lui aurait indiqué pa sPath.
 
Merci


Message édité par alandon le 09-04-2006 à 13:52:29
Reply

Marsh Posté le 09-04-2006 à 16:41:24    

Voici le code modifie pour aller chercher dans les sous dossiers :
 


'Les declarations
 
 
'Repertoire ou sont stockes les fichiers
DossierSauvegarde = "C:\TEST\"
 
'Nombre de jours de conservation des Fichiers
AgeMaximalFichiers = "30"
 
'Comptage des fichiers effaces
NbFichiersEffaces = 0
 
'Initialisation des objets
Set fso = CreateObject("Scripting.FileSystemObject" )
 
'On verifie que le repertoire de sauvegarde existe
If (myName = Winrep = fso.FolderExists(DossierSauvegarde)) = False Then
    Erreur = MsgBox("Le dossier de sauvegarde est introuvable !" )
    Wscript.Quit
End If
 
'On recupere la date systeme
DateSysteme = Date
 
'On apelle la fonction d'effacement
 
Clean(DossierSauvegarde)
 
 
'Fonction d'effacement des fichiers
Sub Clean(FolderPath)
 
Set Folder = fso.Getfolder(FolderPath)
 
'On appelle recursivement la fonction s'il y a des sous dossiers
 
Set SubFolder = Folder.SubFolders
   For Each CurrentFolder in SubFolder
      Clean CurrentFolder.Path
   Next
 
'On efface les fichiers dans le dossier courant
 
For Each File In Folder.Files
        If (DateDiff("d", File.DateLastModified, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            'On verifie qu'ils ne sont pas en lecture seule
            If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
            NbFichiersEffaces = NbFichiersEffaces + 1
        End If
Next
End Sub
 
 
 
 
'On affiche un joli message
MsgBox (Cstr(NbFichiersEffaces) + " fichiers ont ete effaces" )


Message édité par ccp6128 le 09-04-2006 à 16:42:30
Reply

Marsh Posté le 10-04-2006 à 17:07:09    

Je teste ça.
Merci beaucoup
 
:jap:


Message édité par alandon le 10-04-2006 à 17:07:30
Reply

Marsh Posté le 15-05-2006 à 14:38:26    

Bonjour, j'ai essayé votre programme  de supression de fichier, mais j'ai un petit problème, j'aimerais savoir la commande à exécuter pour supprimer les dossier de plus des fichiers.
Merci d'avance.

Reply

Marsh Posté le 13-01-2010 à 13:35:24    

Bonjour,
 
ZerA, spécialiste du déterrage de topics oubliés :D
 
J'espère pouvoir obtenir de l'aide :S
 
J'explique ma situation : je dois réaliser un script exécuté par les Tâches planifiées de Windows permettant de supprimer quotidiennement des fichiers âgés de X jours dans deux dossiers différents. Même combat qu'alandon donc ^^
 
Je me suis donc (très fortement) inspiré du script de ccp6128, voici ce que j'ai testé (et qui ne fonctionne pas) :
 

'Declarations de variables
'Repertoire ou sont stockees les Alertes Webcam (Photos ou Mini videos)
DossierAlertesWebcam = "\\172.20.59.15\emeric"
 
'Repertoire ou sont stockees les captures webcam (Photos et Videos complètes)
DossierCapturesWebcam = "C:\Program Files\Wireless-G Internet Home Monitoring Camera\Storage\LKe74ad8\Data"
 
'Nombre de jours de conservation des Fichiers
AgeMaximalFichiers = "1"
 
'Initialisation des objets
Set fso = CreateObject("Scripting.FileSystemObject" )
 
'On verifie que le dossier de stockage des alertes existe
If (myName = Winrep = fso.FolderExists(DossierAlertesWebcam)) = False Then
    Erreur = MsgBox("Le Dossier des Alertes Webcam est introuvable !" )
    Wscript.Quit
End If
 
'On verifie que le dossier de stockage des captures existe
If (myName = Winrep = fso.FolderExists(DossierCapturesWebcam)) = False Then
    Erreur = MsgBox("Le Dossier des Captures Webcam est introuvable !" )
    Wscript.Quit
End If
 
If (myName = Winrep = fso.FolderExists(DossierAlertesWebcam)) AND  
   (myName = Winrep = fso.FolderExists(DossierCapturesWebcam)) = False Then
    Erreur = MsgBox("Les Dossiers des Alertes Webcam et des Captures Webcam sont introuvables !" )
    Wscript.Quit
End If
 
'On recupere la date système
DateSysteme = Date
 
'Suppression des fichiers trop anciens
Set Folder = fso.Getfolder(DossierAlertesWebcam)
For Each File In Folder.Files
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            'On verifie qu'ils ne sont pas en lecture seule
            If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
        End If
   
Set Folder = fso.Getfolder(DossierCapturesWebcam)
For Each File In Folder.Files
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            'On verifie qu'ils ne sont pas en lecture seule
            If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
        End If
   
Next


 
Voici le message d'erreur :

Code :
  1. Script :   C:\Documents and Settings\Emeric\Bureau\Script\script de nettoyage.vbs
  2. Ligne :    44
  3. Caract. :  15
  4. Erreur :   Variable de contrôle de boucle 'for' incorrecte
  5. Code :     800A0410
  6. Source :   Erreur de compilation Microsoft VBScript


 
Si je retire cette partie du script, il s'execute sans aucun message d'erreur mais n'effectue aucune suppression de fichiers :  

Citation :

(...)
 
Set Folder = fso.Getfolder(DossierCapturesWebcam)
For Each File In Folder.Files
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            'On verifie qu'ils ne sont pas en lecture seule
            If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
        End If

 
Next


 
Est-ce que quelqu'un saurait me dire s'il y a quelque chose qui cloche ? Et aussi me donner son avis sur le troisième 'If' dans la vérification de l'existence des répertoires.
 
@ Tonio : Je pense (mais je suis débutant) que tu devrais remonter d'un répertoire, exemple :
- C:\Documents and Settings\Mon Compte\Bureau\Dossiers\Images\ ---> Supprime les fichiers dans "Images"
- C:\Documents and Settings\Mon Compte\Bureau\Dossiers\ ---> Supprime les fichiers + le dossier "Images"
 
EDIT : Ça pourrait pas venir de la date du système ? Faudrait pas la convertir en quelque chose ?


Message édité par ZeratuuL le 13-01-2010 à 13:46:09
Reply

Marsh Posté le 13-01-2010 à 17:05:20    

Salut,
Sinon ya robocopy.exe de Microsoft.
C'est un utilitaire en ligne de commande qui permet de copier/deplacer des fichiers avec plein d'options comme entre autre un filtre sur l'age des fichiers.
Donc en gros, tu deplaces les fichiers plus vieux que x jours dans un repertoire temporaire, puis tu supprimes ce repertoire temporaire.
Bref, ca tient en 2 lignes dans un fichier .bat.
++

Reply

Marsh Posté le 13-01-2010 à 18:50:00    

Ca reste moche de déplacer un fichier avant de le supprimer (surtout  s'il s'agit de fichiers volumineux).
 
Alors sans avoir regardé ton code j'aurais quelques remaques :
 
- Je ne penses pas que tu puisses attaquer un mappage réseau comme ça par son chemin UNC. Mappe le d'abord via WSHNetwork.MapNetworkDrive.
 
- Tu vérifies deux fois que le dossier DossierAlertesWebcam existe. Je pense qu'une fois suffit.
 
- Tes boucles For sont mal imbriquées : tu as deux boucles For mais un seul Next. Il faut que tu en places aussi un a la fin du premier "For"
 
Une fois tout cela corrigé, y'a pas de raison que ca marche pas.
 

Reply

Marsh Posté le 14-01-2010 à 00:33:22    

ccp6128 a écrit :

Ca reste moche de déplacer un fichier avant de le supprimer (surtout  s'il s'agit de fichiers volumineux).


 
Deplacer revient a renommer si tu restes sur la meme partition.
C'est donc instantanne quelque soit le volume des fichiers.
 
J'ai deja utilise cette technique pour purger les vieux fichiers d'un repertoire.
2 lignes de code la purge, facile a maintenir.

Reply

Marsh Posté le 14-01-2010 à 10:33:38    

J'ai pris en comptes tes 3 remarques ccp6128 mais malgré ça ... ça ne fonctionne tjrs pas :/
 
Concernant ton premier point, je ne sais pas le faire pourrais tu m'éclairer ? Pour le moment j'ai contourné le problème en indiquant deux path indiquant un dossier de test se trouvant sur mon bureau.
 
J'ai corrigé les boucles 'For' et affiné les instances de recherches d'existence de dossier.
 
Et donc ça ne fonctionne tjrs pas. Le script est stable mais n'effectue aucune suppression. Ci-dessous une copie du script :
 

'Declarations de variables
'Repertoire ou sont stockees les Alertes Webcam (Photos ou Mini videos)
DossierAlertesWebcam = "C:\Documents and Settings\Emeric Diot\Bureau\sauvegarde des fichiers_TEST\Alertes"
 
'Repertoire ou sont stockees les captures webcam (Photos et Videos complètes)
DossierCapturesWebcam = "C:\Documents and Settings\Emeric Diot\Bureau\sauvegarde des fichiers_TEST\Captures"
 
'Nombre de jours de conservation des Fichiers
AgeMaximalFichiers = "1"
 
'--> J'ai des fichiers agés de 2 jours
 
'Initialisation des objets
Set fso = CreateObject("Scripting.FileSystemObject" )
 
'On verifie que le dossier de stockage des alertes existe
If (myName = Winrep = fso.FolderExists(DossierAlertesWebcam)) = False Then
    Erreur = MsgBox("Le Dossier des Alertes Webcam est introuvable !" )
    Wscript.Quit
End If
 
'On verifie que le dossier de stockage des captures existe
If (myName = Winrep = fso.FolderExists(DossierCapturesWebcam)) = False Then
    Erreur = MsgBox("Le Dossier des Captures Webcam est introuvable !" )
    Wscript.Quit
End If
 
 
'On recupere la date système
DateSysteme = Date
 
'Suppression des fichiers trop anciens
Set Folder = fso.Getfolder(DossierAlertesWebcam)
For Each File In Folder.Files
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            File.Delete()
        End If  
Next
 
Set Folder = fso.Getfolder(DossierCapturesWebcam)
For Each File In Folder.Files
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
            File.Delete()
        End If
Next

Reply

Marsh Posté le 14-01-2010 à 11:28:18    

Galmiza => Tant que tu restes sur le même disque ca ne change rien en effet. Mais foncièrement, ca me semble "bizarre" de déplacer un fichier d'abord si je cherche à le supprimer.
 
ZeratuuL => Testé à l'instant le script fonctionne. Le mieux serait de faire un peu de débug sur ton pc pour voir ce qui se passe.
 
Essaie d'insérer dans tes boucles for une msgbox qui affichera la valeur de (DateDiff("d", File.DateCreated, DateSysteme).
 
Un truc du genre :
 

Code :
  1. For Each File In Folder.Files
  2.  Msgbox((DateDiff("d", File.DateCreated, DateSysteme)))
  3.         If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
  4.             File.Delete()
  5.         End If 
  6. Next


 
Il y a de fortes chances que cette valeur ne soit pas celle à laquelle tu t'attendrais.

Reply

Marsh Posté le 14-01-2010 à 13:45:13    

Il me retourne la valeur 0, qu'est ce que ça veut dire ? Que les fichiers ont un âge 0 ?
 
Edit: autant de msgbox que de fichier je suppose pcq j'ai du rester appuyé sur entrée quelques secondes lol


Message édité par ZeratuuL le 14-01-2010 à 13:45:55
Reply

Marsh Posté le 14-01-2010 à 14:33:17    

Ha ça y est ! En bidouillant j'ai réussi !
 
Le script ci-dessus fonctionne en effet, et j'ai rajouté le contrôle de fichier en lecture seule au cas ou.
 
Je conseille un petit outil très pratique pour ceux qui veulent tester ce script, il permet de modifier les dates de création / modifications / accès / heures / etc de n'importe quel fichier... Pratique quand on veut supprimer des fichiers vieux de X jours ^^ Par exemple moi j'ai crée une dizaine de bloc note avec une date de création différentes pour tester le script.
 
--> http://www.petges.lu/download/download.html
 
Merci pour l'aide !


Message édité par ZeratuuL le 14-01-2010 à 14:36:13
Reply

Marsh Posté le 14-01-2010 à 14:48:35    

Oops désolé pour le triple post mais c'est pour être sur que tu vois la réponse ccp :S
 
J'ai encore besoin d'aide, je veux nettoyer un serveur FTP (sur mon réseau) + un dossier de mon PC.
 

Citation :

- Je ne penses pas que tu puisses attaquer un mappage réseau comme ça par son chemin UNC. Mappe le d'abord via WSHNetwork.MapNetworkDrive.


 
help ^^

Reply

Marsh Posté le 14-01-2010 à 16:41:54    

Très bien. Alors le principe du truc : Tu mappes ton dossier réseau via le code suivant :
 

Code :
  1. Dim WshNetwork
  2. Set WshNetwork = WScript.CreateObject("WScript.Network" )
  3. WshNetwork.MapNetworkDrive "E:", "\\172.20.59.15\emeric"


 
Tu peux changer la lettre du lecteur (ici E:) en fonction des lettres dispo sur ton pc.
 
Le chemin à nettoyer passe donc à :
 

Code :
  1. DossierAlertesWebcam = "E:\"


 
Enfin à la fin du script tu peux annuler le mapping avec la commande
 

Code :
  1. WshNetwork. RemoveNetworkDrive"E:"

Reply

Marsh Posté le 15-01-2010 à 15:31:52    

Salut,
 
Je viens de tester ta proposition, le script m'affiche deux erreurs différentes :
 
- D'abord, ce pop-up :
http://www.noelshack.com/up/aac/img1-1a607c8097.jpg
(J'ai indiqué la ligne dans le script en commentaire)
 
- Ensuite, sans rien toucher, en re-exécutant le script, ce pop-up :
http://www.noelshack.com/up/aac/img2-456e540822.jpg
 
Script entier :

'Declarations de variables
'Mapping du FTP
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network" )
WshNetwork.MapNetworkDrive "Z:", "\\172.20.59.15\emeric"
 
'Repertoire ou sont stockees les Alertes Webcam (Photos ou Mini videos)
DossierAlertesWebcam = "Z:\"
 
'Repertoire ou sont stockees les captures webcam (Photos et Videos complètes)
DossierCapturesWebcam = "C:\Program Files\Wireless-G Internet Home Monitoring Camera\Storage\LKe74ad8\Data"
 
'Nombre de jours de conservation des Fichiers
AgeMaximalFichiers = "2"
 
'Initialisation des objets
Set fso = CreateObject("Scripting.FileSystemObject" )
 
'On verifie que le dossier de stockage des alertes existe
If (myName = Winrep = fso.FolderExists(DossierAlertesWebcam)) = False Then
    Erreur = MsgBox("Le Dossier des Alertes Webcam est introuvable !" )
    Wscript.Quit
End If
 
'On verifie que le dossier de stockage des captures existe
If (myName = Winrep = fso.FolderExists(DossierCapturesWebcam)) = False Then
    Erreur = MsgBox("Le Dossier des Captures Webcam est introuvable !" )
    Wscript.Quit
End If
 
 
'On recupere la date système
DateSysteme = Date
 
'Suppression des fichiers trop anciens
Set Folder = fso.Getfolder(DossierAlertesWebcam)
For Each File In Folder.Files
'LIGNE 38:
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
   If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
       End If  
Next
 
Set Folder = fso.Getfolder(DossierCapturesWebcam)
For Each File In Folder.Files
        If (DateDiff("d", File.DateCreated, DateSysteme) > CInt(AgeMaximalFichiers)) Then
   If File.Attributes And 1 Then File.Attributes = File.Attributes - 1
            File.Delete()
  End If
Next
 
'Supprime le mapping
WshNetwork. RemoveNetworkDrive "Z:"


 
Chemin du FTP :  
http://www.noelshack.com/up/aac/img3-f0d723d122.jpg
 
J'ai fais un test avec E:, F:, T: lol mais à chaque fois il me crée un nouveau lecteur réseau du même nom :S
Donc voila ça ne fonctionne pas, est-ce que ça te parle ?


Message édité par ZeratuuL le 15-01-2010 à 15:32:55
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed