IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

supprimer les 6 plus ancien fichier


Sujet :

VBScript

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut supprimer les 6 plus ancien fichier
    bonjout

    dans un dossier on réalise une sauvegarde du disque.

    Je souhaite dans ce dossier garde les 6 derniere sauvegarde et efface la sauvegarde la plus ancienne (dans la 7eme la plus vielle)

    pour un autre script j'ai utilise un script qui est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Fso
    Dim Directory 
    Dim Modified
    Dim Files 
    Set Fso = CreateObject("Scripting.FileSystemObject" )
    Set Directory = Fso.GetFolder("D:\Sauve base journaliere" )
    Set Files = Directory.Files 
     
    For Each Modified in Files
    If DateDiff("D", Modified.DateLastModified, Now) > 18 Then Modified.Delete
    Next
    je pense le modifier comme sa :
    mais je ne sais comment lui dire efface le plus ancien
    qui peux m'aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Fso
    Dim Directory 
    Dim Modified
    Dim Files 
    Set Fso = CreateObject("Scripting.FileSystemObject" )
    Set Directory = Fso.GetFolder("D:\Sauve base journaliere" )
    Set Files = Directory.Files 
     
    For Each Modified in Files
    If (garde les 6 dernier sauvegarde et efface la plus vielle donc la 7eme) > 6 Then Modified.Delete
    Next

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Plutot que de faire une datediff dans ton foreach, remplis un tableau à deux dimension qui contient le nom du fichier et la date de modification.
    Remplis ce tableau de façon trier.

    Si tu ne sais pas trop comment remplir de façon trier je t'explique rapidement.
    Pour chaque fichier de ta boucle, tu parcours ton tableau et tu testes si ton fichier est plus vieux que les éléments de ton tableau. Comme ces éléments sont déjà trié, lorsque tu trouves que le fichier que tu veux insérer est plus récent que un des fichiers du tableau, tu l'insère avant cet éléments du tableau.
    BOn ce n'est aps le meilleu tri possible, mais tu peux trouver des exemples d'autre tri sur le net.

    Une fois ton tableau trier et remplis, tu peux le parcourir et supprimer tous les fichiers qui sont après la 6eme casse du tableau.

    Une dernière chose, les liste et les collections peuvent être plus adapté au tri, moins chaint en tout cas. Je pense qu'ils ont des fonction d'insertion à un index précis mais je ne suis plus sur.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    alors c'est :
    Citation Envoyé par popofpopof
    supprimer les 6 plus ancien fichier

    Citation Envoyé par popofpopof Voir le message
    bonjout
    ...
    Je souhaite dans ce dossier garde les 6 derniere sauvegarde et efface la sauvegarde la plus ancienne (dans la 7eme la plus vielle)
    ...
    ben dans le deuxième cas cela n'as pas l'air bien compliqué... tu parcours les 7 fichiers ..(grâce à ta boucle ..) et tu mémorise le plus ancien... que tu peu ensuite effacer...

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Ha il n'y aurait que 7 fichier ?
    C'est vrai qu'un défaut dans l'expression du sujet ne permet pas de comprendre clairement le problème.
    S'il n'y a que 7 fichiers, que tu souhaites en supprimer 6, ou 1, le mieux est de rechercher ce fichier particulier et de le supprimer ou de supprimer les autres.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    il y a 7 fichier et je veux supprimer le plus ancien des 7 fichier puis je copirai le nouveau. Donc il y a toujours 7 fichier dans le dossier

    Citation Envoyé par bbil
    ben dans le deuxième cas cela n'as pas l'air bien compliqué... tu parcours les 7 fichiers ..(grâce à ta boucle ..) et tu mémorise le plus ancien... que tu peu ensuite effacer...
    je ne sais comment faire sa ? avec quel fonction?? peux tu m'explique stp

    merci

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    As tu compris le code que tu nous a posté ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,

    tu retrouveras ce même type de demande ici (sauf que c'est 15 jours !!)

    http://www.developpez.net/forums/arc.../t-209141.html

    et en plus c'est déjà CED600 qui réponds (incontournable )

    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut


    lol je ne me trouve pas très brillant sur le poste
    j'ai balancé les deux liens que je balance toujours, dit ce que le script ne faisais pas, et attendu que le gars corrige son script
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  9. #9
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Citation Envoyé par ced600 Voir le message
    lol je ne me trouve pas très brillant sur le poste
    effectivement, ce n'est pas toujours facile de rester constant dans l'excellence mais depuis il y a presciption et grace présidentielle...

    Sinon, voici un autre lien chez les scripting Guy de Crosoft (on devrait toujours commencer par là) et qui s'intitule "How Can I Delete All Files Older Than a Specified Date? " :

    http://www.microsoft.com/technet/scr...4/hey1104.mspx

    du coup il ne te reste plus qu'à dire que ta "spécified date" c'est la date de ton fichier le + ancien et voilà.

    Pour savoir quelle est la date de ton fichier le + ancien, je tencourage à te rendre chez les scripting Guy de Crosoft (on devrait toujours commencer par là) (je radote) et qui s'intitule "How Can I List All the Files in a Folder, Ordered By Creation Date?" :

    http://www.microsoft.com/technet/scr...5/hey1003.mspx

    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    je suis desole je doit etre un peu con lol

    j'ai lu les lien que vous m'avez envoyer et je ne comprend pas comment il faut faire?

    j'ai vu que sur un lien on parler de date superieur a 15 jours, moi je veux qu'il me supprimer le fichier le plus ancien qu'il date de 1 jour ou un mois avec un maximun de 7 fichier dans le dossier au total.
    Donc on comparer les fichiers en eux et on supprimer le fichier le plus vieux.

    Comment réalise cette comparaisson?

    je veux comprendre mais je débute expliqué moi merci bcp

  11. #11
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    lances ca dans le répertoire qui contient tes fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Set objShell = CreateObject("WScript.Shell")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objWshScriptExec = objShell.Exec("Cmd /c Dir /o-d")
    Set objStdOut = objWshScriptExec.StdOut
     
    Do Until objStdOut.AtEndOfStream
       strLine = objStdOut.ReadLine
       If Mid(StrLine, 18, 6) = "      " And Len(StrLine) > 1 Then
          I = I + 1
          If I > 6 Then
             strOldestFile = Mid(StrLine, 37, Len(StrLine) - 36)
             objFSO.DeleteFile(strOldestFile) 
          End If
       End if
    Loop
    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    On s'en fou un peu que l'on te parle de date supérieur à 15 jours. C'est un exemple.
    SUr un fichier tu as une donnée associé qui est sa date de modificaton.
    L'idée c'est de récupérer toutes les dates des fichiers que tu listes.
    L'a tu as une liste de date. Bah tu fais ce qque tu ferais à la main, tu les compares et tu détermines la date le plus veille ou la plus récente selon ce que tu veux faires.
    Tu as conservé le lien entre la date et le fichier, donc tu peux supprimer le fichiers.

    Le parcour d'une liste, une collection de données, que ce soit des dates, des nombres des mots, se fait à l'aide d'une boucle.
    En VBS on a une super boucle foreach. C'est simple tu traduis -> pour chaque.
    Donc pour chaque entité de ta liste tu vas faire quelque chose.
    Dans ton cas tu vas supprimer le plus vieux fichier en comparant les fichiers de la liste.
    On peu le faire en utilisant le foreach, mais pour des raisons de facilités, certain préféreront les boucles classique comme la boucle for
    Le principe est le même, juste qu'avec la boucle for tu as accés à la variable qui te permet d'incrémenter et de passer au fichier suivant.
    Quand tu as le nom de fichier tu n'as plus qu'à utiliser la méthode delete.

    bon tu vas me dire tout cela c'est beau, mais comment je construit ma liste de fichiers. Bah rien de plus simple. L'objet FSO t'offre accès à différents objets et différentes méthode, et notemment donc les 3 lignes de code de ton script de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set Fso = CreateObject("Scripting.FileSystemObject" )
    Set Directory = Fso.GetFolder("D:\Sauve base journaliere" )
    Set Files = Directory.Files

    Quand à la solution de RadPAT, elle est différente, il passe par un autre moyen que l'on pourrait presque considérer comme de la bidouille
    Enfin j'ai déjà des trucs pareil moi aussi

    En fait il pense ainsi : Pourquoi m'ennuyer à déterminer le plus vieux fichier, alors que grâce à une console dos et des commandes dos je peux le déterminer.

    Donc il se dit, je vais demander à mon script de lancer une console et d'executer mes commandes dos (les 3 première ligne de son programme).
    Puis la 4eme sert à dire à l'ordi de ne pas afficher le résultat sur l'écran mais dans un objet, donc ce sera stocké en mémoire.
    En fait cette objet correspond à du texte.
    Le reste du script n'est qu'une lecture de ce texte, comme un humain lirait le résultat de la commande., il arrive ainsi à déterminer le plus vieux fichier et donc il termine par sa suppression.

    Personnellement je préfère la première méthode, masi la deuxième méthode est peut être plus simple à comprendre. En plus RadPAT c'est embêté à la faire.

    je suis desole je doit etre un peu con lol
    Un débutant n'est pas con, il est ignorant et c'est normal, nous avons été comme toi.

    Par contre je voudrais te signaler que ton niveau en programmation semble assez bas, ce qui n'est pas honteux, il y a 2 ans et demie j'étais à ton niveau.
    Peut être aurais tu besoin de suivre des cours, des tutoriaux, avant de faire du développement. Il y en a beaucoup de disponible sur internet.
    Enfin je dis cela uniquement si tu veux faire du développement. Si ton seul but était de réaliser ce script pour x ou y raison alors la solution de RadPAT devrait te suffir.

    Sur ce bonne continuation en espérant que tu es compris quelque chose
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  13. #13
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    ok merci pr vos reponse c vrais que je trouve pas mal le module de RadPAT

    j'aurai plusieur remarque a faire.
    je souhaite passe le nombre de fichier de 7 a 12 comment faire car ci je change les valeurs 6 en 11 ou 12 sa marche pas donc j'aurai voulu savoir a quoi correspond les valeurs suivante dans ton script : 18, 6, 37, 36

    et enfin un autre question je souhaite pointe le dossier ou le script doit s'exécute et non pas copier le script dans ce dossier car j'ai plusieur dossier et oui il faut réalisé ce travail et je souhaite donc avoir qu'un script (un fichier) qui exécutera plusieur tache ( sa je sais le faire lol)
    donc pas exemple ci mon script dans dans le dossier C:\a et que le dossier ou il faut réalisé la suppression des fichier ancien est dans c:\a\b comment le dire au script ( je pense que c'est dans cette ligne mais je trouve pas "("Cmd /c Dir /o-d")
    ")

    merci bcp pour votre aide

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par bbil Voir le message
    .. tu parcours les 7 fichiers ..(grâce à ta boucle ..) et tu
    mémorise le plus ancien... que tu peu ensuite effacer...
    bon je reviens la dessus en espérant ne pas trop t'embrouiller... (essai de comprendre le code )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Dim Fso
    Dim Directory 
    Dim Modified
    Dim Files 
    Set Fso = CreateObject("Scripting.FileSystemObject" )
    Set Directory = Fso.GetFolder(".\tmp" )
    Set Files = Directory.Files 
    Dim fichierLePlusVieux ' Variable utilisée pour mémoriser le fichier le plus vieux .. (celui dont la date de la derniére modification est la plus petite)
     
    if files.count >= 7 Then 'il faut qu'il y ait au moins 7 fichiers pour pouvoir effacer le 7°
    	For Each f in files 
    		'Si aucun fichier mémorisé mémorise le fichier courant..
    		if  IsEmpty(fichierLePlusVieux) then set fichierLePlusVieux = f
    		'si date du fichier parcouru dans boucle inférieure au fichier mémorisé, mémorise ce fichier
    		if f.DateLastModified < fichierLePlusVieux.DateLastModified Then set fichierLePlusVieux = f
    	next
    	msgbox "Le fichier à effacer " & fichierLePlusVieux.Name & " En utilisant la Cde : fichierLePlusVieux.Delete "
    end if



  15. #15
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    Merci bcp BBIL sa marche super bien comme je voulai et j'ai même réusi a l'adapte a mon script

    donc sujet résolu et que cela permete a d'autre de trouve des solutions...

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    j'aurai voulu savoir a quoi correspond les valeurs suivante dans ton script : 18, 6, 37, 36
    Bah comme RadPAT fait un peu de bidouille il découpe des chaines de caractères, donc ces chiffres corrspondent à des position de caractères
    Donc faudrait pas y toucher
    Mais le script de bbil est mieux, ce n'est pas de la bidouille

    Attention ce qui suit n'est PAS méchant, c'est juste un CONSEIL :
    Je te conseil d'apprendre les bases du développement grâce à des cours que tu peut trouver sur le net, en effet j'ai l'impression qu'il te manque une logique de développeur, peut être commence tu seulement
    Ou alors ce n'est pas ton métier et tu avais juste besoin d'un script, cela arrive aussi des fois
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment trouver les 10 plus gros fichiers d'un repertoire
    Par hornetbzz dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/02/2011, 23h52
  2. Supprimer les lignes d'un fichier
    Par Wisefool dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/02/2011, 09h18
  3. supprimer les donnés dans un fichier en vb
    Par rokirakat dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/02/2008, 21h26
  4. Supprimer les lignes d'un fichier texte
    Par radhwene dans le forum Langage
    Réponses: 1
    Dernier message: 20/06/2007, 11h01
  5. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo