Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2120 connectés 

  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Suppression de fichiers en fonction d'une date.

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Suppression de fichiers en fonction d'une date.

n°2350363
alandon
Posté le 09-03-2006 à 18:56:12  profilanswer
 

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 ?

mood
Publicité
Posté le 09-03-2006 à 18:56:12  profilanswer
 

n°2350371
ccp6128
Syntax error
Posté le 09-03-2006 à 19:01:12  profilanswer
 

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.

n°2350404
alandon
Posté le 09-03-2006 à 19:21:00  profilanswer
 

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

n°2350426
Requin
Posté le 09-03-2006 à 19:47:59  profilanswer
 

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"

n°2350437
ccp6128
Syntax error
Posté le 09-03-2006 à 19:53:21  profilanswer
 

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" )

n°2350495
alandon
Posté le 09-03-2006 à 20:37:29  profilanswer
 

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

n°2350509
Requin
Posté le 09-03-2006 à 20:48:24  profilanswer
 

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.

n°2350514
alandon
Posté le 09-03-2006 à 20:54:04  profilanswer
 

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:
 

n°2350517
alandon
Posté le 09-03-2006 à 20:56:31  profilanswer
 

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
n°2350523
ccp6128
Syntax error
Posté le 09-03-2006 à 21:03:32  profilanswer
 

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

mood
Publicité
Posté le 09-03-2006 à 21:03:32  profilanswer
 

n°2350526
ccp6128
Syntax error
Posté le 09-03-2006 à 21:08:06  profilanswer
 

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.

n°2350537
alandon
Posté le 09-03-2006 à 21:19:37  profilanswer
 

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.

n°2350550
ccp6128
Syntax error
Posté le 09-03-2006 à 21:41:35  profilanswer
 

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"  

n°2350556
alandon
Posté le 09-03-2006 à 21:47:49  profilanswer
 

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
n°2350560
ccp6128
Syntax error
Posté le 09-03-2006 à 21:53:25  profilanswer
 

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
n°2350614
alandon
Posté le 09-03-2006 à 23:00:33  profilanswer
 

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
n°2355741
alandon
Posté le 15-03-2006 à 13:36:44  profilanswer
 

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
n°2355936
Requin
Posté le 15-03-2006 à 16:54:21  profilanswer
 

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
n°2355979
alandon
Posté le 15-03-2006 à 17:31:37  profilanswer
 

:jap:


Message édité par alandon le 15-03-2006 à 17:32:00
n°2360950
alandon
Posté le 21-03-2006 à 10:14:36  profilanswer
 

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

n°2361520
Requin
Posté le 21-03-2006 à 18:10:37  profilanswer
 

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

n°2361553
alandon
Posté le 21-03-2006 à 18:49:35  profilanswer
 

j'ai pas tout capté là

n°2361632
Requin
Posté le 21-03-2006 à 20:16:15  profilanswer
 

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)

n°2361669
alandon
Posté le 21-03-2006 à 21:03:56  profilanswer
 

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

n°2361731
Requin
Posté le 21-03-2006 à 22:42:00  profilanswer
 

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.

n°2378701
alandon
Posté le 09-04-2006 à 13:51:27  profilanswer
 

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
n°2378846
ccp6128
Syntax error
Posté le 09-04-2006 à 16:41:24  profilanswer
 

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
n°2379662
alandon
Posté le 10-04-2006 à 17:07:09  profilanswer
 

Je teste ça.
Merci beaucoup
 
:jap:


Message édité par alandon le 10-04-2006 à 17:07:30
n°2411091
tonio1982
Posté le 15-05-2006 à 14:38:26  profilanswer
 

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.

n°2923435
ZeratuuL
Posté le 13-01-2010 à 13:35:24  profilanswer
 

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
n°2923488
Galmiza
Posté le 13-01-2010 à 17:05:20  profilanswer
 

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.
++

n°2923504
ccp6128
Syntax error
Posté le 13-01-2010 à 18:50:00  profilanswer
 

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.
 

n°2923551
Galmiza
Posté le 14-01-2010 à 00:33:22  profilanswer
 

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.

n°2923572
ZeratuuL
Posté le 14-01-2010 à 10:33:38  profilanswer
 

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

n°2923580
ccp6128
Syntax error
Posté le 14-01-2010 à 11:28:18  profilanswer
 

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.

n°2923600
ZeratuuL
Posté le 14-01-2010 à 13:45:13  profilanswer
 

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
n°2923610
ZeratuuL
Posté le 14-01-2010 à 14:33:17  profilanswer
 

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
n°2923613
ZeratuuL
Posté le 14-01-2010 à 14:48:35  profilanswer
 

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 ^^

n°2923622
ccp6128
Syntax error
Posté le 14-01-2010 à 16:41:54  profilanswer
 

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:"

n°2923761
ZeratuuL
Posté le 15-01-2010 à 15:31:52  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Windows & Software
  Logiciels

  Suppression de fichiers en fonction d'une date.

 

Sujets relatifs
le virus qui transforme les fichiers .doc en .exeWindows 98 - Perte de la fonction aide
Anciens fichiersScript CGI + récupération de fichiers zippés
FolderShare - Transfert de fichiers et accès aux fichiers à distancecommande DOS et date
windows : gestion des fichiers[Outlook 2003] Importer la liste de contact d'un pc sans suppression
Fichiers Excel2000 lecture seuleProblèmes Ajout suppression de programmes - Bandes noires sur les 2/3
Plus de sujets relatifs à : Suppression de fichiers en fonction d'une date.


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR