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

Scripts/Batch Discussion :

Effacement du fichier le plus vieux jusqu'a concurrence d'une taille [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Effacement du fichier le plus vieux jusqu'a concurrence d'une taille
    Bonjour,
    J'aurai aimé avoir un coup de paluche pour un batch qui fait ceci:

    Tant que le contenu du répertoire X est plus grand que 87GB alors
    {
    efface le fichier le plus ancien du répertoire X (date création)
    }

    Et ça fonctionnerait avec un chemin du style \\10.10.10.5\logs ?


    merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Salut,

    Pour la taille du dossier :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    for /f "tokens=3 delims= " %%a in ('dir ^| find /i "Bytes"') do (
      set $NbBytes=%%a
      goto:next)
    exit/b
     
    :next
    echo Nb Bytes = : [%$NbBytes%]

    Pour le fichier le plus vieux :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    for /f "delims=" %%a in ('dir /b/a-d/od') do (
      set $LeVieux="%%a"
      Goto:next)
    exit/b
     
    :next
    echo Fichier le plus vieux = %$LeVieux%


    Il te suffit de faire une boucle qui test la taille et détruit le fichier le plus vieux si la taille n'est pas >87 Gb


    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Salut,
    Merci pour les scripts.
    je les épluches pour mieux les comprendre.
    J'ai testé le deuxième
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    for /f "delims=" %%a in ('dir "D:\testbat\toto"') do (
      set $LeVieux="%%a"
      Goto:next)
    exit/b
     
    :next
    echo Fichier le plus vieux = %$LeVieux%
    et il me donne pour réponse : Fichier le plus vieux = "Le volume dans le lecteur D s'appelle BGGTM"
    Je regarde de mon côté pour savoir pourquoi il me donne se résultat.
    Je ne sais pas pourquoi mais j'ai le furieux pressentiment qu'il manque un trux du style :
    "Si date en mémoire est plus récente que date fichier alors mettre nom et date fichier en mémoire" au niveau du "set"?
    Si tu as une petite idée, c'est bien volontier.

  4. #4
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Execute le tel qu'il est "/b/a-d/od" n'est pas un chemin de répertoire mais une suite de paramètre pour la commande DIR :

    Ou si tu veux changer : dir c:\Ton\chemin /b/a-d/od.

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Arf, heu oui, zut.
    le batch 2 fonctionne tip top maintenant, merci
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    echo off
    set $dossiure="D:\testbat\toto\"
     
    for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
    	set $LeVieux="%%a"
    	Goto:next)
    exit /b
     
    :next
    echo Fichier le plus vieux = %$LeVieux%

    et j'ai aussi fait le batch finale
    Code bat : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    echo off
    set $dossiure="d:\testbat\toto\"
    set $taille=452892820
     
    :recommence
    echo "------------------------------------------------------------"
    for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
      set $NbBytes=%%a
      Goto:fintaille)
    exit /b
     
    :fintaille 
     
    if %$NbBytes% GTR %taille% (
    	for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
    		set $LeVieux="%%a"
    		Goto:finvieu)
    	exit /b
     
    	:finvieu
    	del %dossiure%\%$LeVieux% /F /Q
    	echo %$LeVieux% efface
    	Goto:recommence)
     
    	echo le dossier fait %$NbBytes%
    	Goto:finbatch
    exit /b
    :finbatch

    Par contre, le batch 1. il y avait un bug, faut remplacer le mot "Bytes" par "octets".
    Il cause la france mon PC.

    J'ai 2 pépins là :
    1) Il ne trouve que la taille du répertoire où il est malgré l'indication.
    2) la comparaison de taille n'a pas l'air de fonctionner.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    A vrai dire, j'ai trouvé d'autre bug sur lequel je bute un peu :

    1-Il ne détecte que la taille du répertoire d'où il est lancé malgré les indications.
    2-La variable taille ne supporte pas des taille de 80Go exprimé en octets
    3-Il aime pas faire des bons en arrière dans le code.
    4-Celui qui l'a codé (moi) est un vrai manche.

    Et là je coince un peu.

  7. #7
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Essaye comme ça :

    Code bat : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    @echo off
    setlocal enabledelayedexpansion
    set dossiure="c:\toto\test"
    set "$max=80000000"
     
    Echo traitement en cours....
     
    :loop
    for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
      set $NbBytes=%%a
      goto:test
    )
     
    :test
     
    If %$NbBytes% GTR %$max% (
      for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
           set $LeVieux="%%a"
           Echo Destruction de : [!$LeVieux!]
           del "!$LeVieux!"
           goto:wait
       )
    )
     
    :wait
    ping localhost -n 2 >nul
    goto:loop

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    ça fonctione tip top, merci beaucoup pour l'aide.

  9. #9
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Salut
    je viens de tester ce code sur un XP
    cela fait 25 minutes qui tourne, sans résultats !!!

    est-ce normal ?



    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
    20
    21
    22
    23
    24
    25
    26
    27
    @echo off
    setlocal enabledelayedexpansion
    set dossiure="c:\toto\test"
    set "$max=80000000"
     
    Echo traitement en cours....
     
    :loop
    for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
      set $NbBytes=%%a
      goto:test
    )
     
    :test
     
    If %$NbBytes% GTR %$max% (
      for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
           set $LeVieux="%%a"
           Echo Destruction de : [!$LeVieux!]
           del "!$LeVieux!"
           goto:wait
       )
    )
     
    :wait
    ping localhost -n 2 >nul
    goto:loop
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  10. #10
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Oui si la taille de ton dossier est inferieur à 80 Gb...

    T'attend quoi comme résultat ?

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  11. #11
    Membre éclairé Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Points : 809
    Points
    809
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Oui si la taille de ton dossier est inferieur à 80 Gb...

    T'attend quoi comme résultat ?

    CHAMPIONNNNNNNNNNNNN! !
    ________________________________________________________________
    N'oublie pas de faire une sauvegarde avant d'exécuter des scripts...
    Si j'ai ton problème, un petit fait toujours plaisir!
    ________________________________________________________________

  12. #12
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Hello
    J' ai modifié un peu le code pour le passer à 200 Go
    Pour un dossier à 207 GO
    soit 223221 161 Octets


    Là je pige pas..... cela devrait passer
    Pour info ces données sont sur un nas ... je sais pas si cela change qqc
    Y étant un lettre de lecteur réseau


    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
    20
    21
    22
    23
    24
    25
    26
    27
    @echo off
    setlocal enabledelayedexpansion
    set dossiure="Y:\FILMS"
    set "$max=20000000"
     
    Echo traitement en cours....
     
    :loop
    for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
      set $NbBytes=%%a
      goto:test
    )
     
    :test
     
    If %$NbBytes% GTR %$max% (
      for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
           set $LeVieux="%%a"
           Echo Destruction de : [!$LeVieux!]
           del "!$LeVieux!"
           goto:wait
       )
    )
     
    :wait
    ping localhost -n 2 >nul
    goto:loop
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  13. #13
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Fais juste un DIR dans le CMD et regarde la dernière ligne.
    La taille est-elle on octets ou bytes ?

    Si ça te donne la taille en bytes change la valeur dans le FIND :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "bytes"') do (

    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  14. #14
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Hello
    Je viens de tenter, c'est bien en octects .......
    200 Go = set "$max=20000000"

    C'est correct???


    bonne soirée
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  15. #15
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    214748364800
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  16. #16
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    J'ai essayé et cela tourne en boucle sans résultat

    J'ai fait une copie d'écran des propriétés de mon dossier si çà peut aider.....
    Images attachées Images attachées  
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bon je te mets une copie du script que j'utilise.

    -A la différence du premier, celui-là s'interrompt quand il a fini.
    -Tu pourras remarquer qu'il n'y a pas de nom de user et de pass pour le net use. Car je l'utilise dans une tâche planifiée ou est configuré le user et pass. J'aime pas les user et pass en claire dans les batch.
    -Quand tu veux mettre une taille en octets d'un truc qui est giga, c'est multiplié par 1073741824(1024*1024*1024 ou 1024^3 ou 2^30), exemple 200 * 1073741824 = 214748364800
    -Bosse sur un répertoire de test car si tu couilles, tu risques de tout effacer.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    @echo off
    setlocal enabledelayedexpansion
    net use Y: \\IPouHost\kekpart
    
    set dossiure=Y:\FILMS\
    set "$max=214748364800"
    
    Echo traitement en cours....
    
    :loop
    for /f "tokens=3 delims= " %%a in ('dir %dossiure% ^| find /i "octets"') do (
      set $NbBytes=%%a
      goto:test
    )
    :test
    
    If %$NbBytes% GTR %$max% (
      for /f "delims=" %%a in ('dir %dossiure% /b/a-d/od') do (
    	   set LeVieux="%dossiure%%%a"
           Echo Destruction de : [!LeVieux!]
           del "!LeVieux!"
           goto:wait
       )
    )
    goto:fin
    :wait
    ping localhost -n 1
    goto:loop
    :fin
    net use Y: /d
    echo fini

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

Discussions similaires

  1. Effacer le fichier le plus ancien
    Par vibos dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 31/01/2013, 00h36
  2. Supprimer les fichiers Excel plus vieux que 7 jours
    Par jeje00 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2009, 20h05
  3. [FTP] Tester si un fichier est plus vieux de 48 heures
    Par kilian67 dans le forum Langage
    Réponses: 6
    Dernier message: 04/07/2008, 09h50
  4. Réponses: 3
    Dernier message: 18/05/2006, 17h58

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