Suppression de fichiers en fonction d'une date. - Logiciels - Windows & Software
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.
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.
Je t'envoi mon mail en mp
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 :
' |
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.
|
Marsh Posté le 09-03-2006 à 20:37:29
ccp6128 a écrit : Je vois que je suis loin ... fichiers ont ete effaces" ) |
Tout d'abord un grand et sincère merci à toi ccp6128 pour ton mail et ton script, ça marche niquel
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
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.
Marsh Posté le 09-03-2006 à 20:54:04
Requin a écrit : Pareil, j'ai fait ... Echanges", sReport, "adm@domain.local" |
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 :
|
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 ?
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. |
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 ?
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
Marsh Posté le 09-03-2006 à 21:08:06
alandon 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.
Marsh Posté le 09-03-2006 à 21:19:37
ccp6128 a écrit : Tu veux probablement parler d'un dossier partage. |
Oui
domage que tu n'ai pas le code pour le login et mot de passe. je vais essayer de chercher.
Merci pour tout.
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
|
Marsh Posté le 09-03-2006 à 21:47:49
ccp6128 a écrit : Ah, j'ai trouve.
|
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]
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.
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 : |
Ah ok, je croyais que c'était des variables
Edit: Là je suis en week end ,je teste tout ça lundi et je reviendrais poster si j'ai des problèmes.
Marsh Posté le 15-03-2006 à 13:36:44
alandon a écrit : Ah ok, je croyais que c'était des variables |
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.
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" ) |
En supposant que ton serveur s'appelle effectivement "serveur" et que ton partage s'appelle effectivement "Share" (ce dont je doute)
Marsh Posté le 21-03-2006 à 10:14:36
Requin a écrit : Tu ne peux pas virer sPath...
|
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 :
|
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
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
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)
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.
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.
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
Marsh Posté le 09-04-2006 à 16:41:24
Voici le code modifie pour aller chercher dans les sous dossiers :
|
Marsh Posté le 10-04-2006 à 17:07:09
Je teste ça.
Merci beaucoup
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.
Marsh Posté le 13-01-2010 à 13:35:24
Bonjour,
ZerA, spécialiste du déterrage de topics oubliés
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 |
Voici le message d'erreur :
Code :
|
Si je retire cette partie du script, il s'execute sans aucun message d'erreur mais n'effectue aucune suppression de fichiers :
Citation : (...) |
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 ?
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.
++
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.
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.
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 |
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 :
|
Il y a de fortes chances que cette valeur ne soit pas celle à laquelle tu t'attendrais.
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
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 !
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 ^^
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 :
|
Tu peux changer la lettre du lecteur (ici E en fonction des lettres dispo sur ton pc.
Le chemin à nettoyer passe donc à :
Code :
|
Enfin à la fin du script tu peux annuler le mapping avec la commande
Code :
|
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 :
(J'ai indiqué la ligne dans le script en commentaire)
- Ensuite, sans rien toucher, en re-exécutant le script, ce pop-up :
Script entier :
'Declarations de variables |
Chemin du FTP :
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 ?
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 ?