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 :

Purge d'un répertoire après x mois


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut Purge d'un répertoire après x mois
    Bonjour,

    j'essaye de faire le script suivant pour purger les fichiers de plus de x mois dans un répertoire.

    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
    32
    @echo off
    
    SETLOCAL
    
    SET rep=D:\temp
    
    SET datejour=%date%
    
    SET nbmoisret=0
    
    	for /f "tokens=1 delims=/ " %%b in ('date/t') do set jour=%%b
    	for /f "tokens=2 delims=/ " %%b in ('date/t') do set mois=%%b
    	for /f "tokens=3 delims=/ " %%b in ('date/t') do set annee=%%b
    
    set /A mois=%mois%-%nbmoisret%
    
    echo %mois%
    
    IF %mois% LEQ 0 (set /A mois=%mois%+12
    set /A annee=%annee%-1)
    
    echo %mois%
    
    set datelimite=%jour%/%mois%/%annee%
    
    echo %datelimite%
    
    cd %rep%
    
    FOR /F "skip=4 tokens=1,4* " %i in ('dir /a-d /od') do (if %i LSS %datelimite% (del "%j %k" /Q))
    
    pause
    Mais le batch ne s'exécute pas.

    Et quand quand je le lance en posant des "pause" après chaque instruction, il "plante" à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR /F "skip=4 tokens=1,4* " %i in ('dir /a-d /od') do (if %i LSS %datelimite% (del "%j %k" /Q))
    Une idée ?

    Merci.

  2. #2
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    Remplace ta ligne par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FOR /F "skip=4 tokens=1,4* " %%i in ('dir /a-d /od') do (if %%i LSS %datelimite% (del "%%j %%k" /Q))

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Merci koKoTis mon répertoire est bien purgé.

    Sauf que (évidement) j'ai l'impression que la comparaison de date ne fonctionne pas...

    Je pense que je vais passer la date au format (SSAAMMJJ) mais si quelqu'un as une autre idée, il suis prenneur...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Au final, j'ai dévellopé une solution de purge paramétrage à x jour :

    Voici mon code commenté.

    J'espere qu'il servira a d'autre :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    @echo off
    
    SETLOCAL
    ::Déclation des varibles du répertoire à purger ainsi que du nombre de jour de rétention
    SET rep=D:\temp
    SET nbjoursret=12
    
    ::Découpage de la date du jour
    for /f "tokens=1 delims=/ " %%b in ('date/t') do set jour=%%b
    for /f "tokens=2 delims=/ " %%b in ('date/t') do set mois=%%b
    for /f "tokens=3 delims=/ " %%b in ('date/t') do set annee=%%b
    
    ::On positionne la date du jour en nombre de jour
    IF %mois%==01 set /A datejour=(%annee%*365)+0+%jour%
    IF %mois%==02 set /A datejour=(%annee%*365)+31+%jour%
    IF %mois%==03 set /A datejour=(%annee%*365)+31+28+%jour%
    IF %mois%==04 set /A datejour=(%annee%*365)+31+28+31+%jour%
    IF %mois%==05 set /A datejour=(%annee%*365)+31+28+31+30+%jour%
    IF %mois%==06 set /A datejour=(%annee%*365)+31+28+31+30+31+%jour%
    IF %mois%==07 set /A datejour=(%annee%*365)+31+28+31+30+31+30+%jour%
    IF %mois%==08 set /A datejour=(%annee%*365)+31+28+31+30+31+30+31+%jour%
    IF %mois%==09 set /A datejour=(%annee%*365)+31+28+31+30+31+30+31+31+%jour%
    IF %mois%==10 set /A datejour=(%annee%*365)+31+28+31+30+31+30+31+31+30%jour%
    IF %mois%==11 set /A datejour=(%annee%*365)+31+28+31+30+31+30+31+31+30+31+%jour%
    IF %mois%==12 set /A datejour=(%annee%*365)+31+28+31+30+31+30+31+31+30+31+30+%jour%
    
    ::On se déplace dans le répertoire à purger
    cd %rep%
    
    ::Boucle sur les 
    for /F "skip=4 tokens=1,4*" %%i in ('dir /A-D /od') do set datefic=%%i& set nomfic=%%j %%k& call :fpurge
    
    ::sortie du programme
    exit 0
    
    ::Fonction de purge
    :fpurge
    setlocal enableextensions enabledelayedexpansion
    
    ::Découpage de la date du fichier
    for /f "tokens=1 delims=/ " %%b in ("%datefic%") do set jour=%%b
    for /f "tokens=2 delims=/ " %%b in ("%datefic%") do set mois=%%b
    for /f "tokens=3 delims=/ " %%b in ("%datefic%") do set annee=%%b
    
    ::On positionne la date du du fichier en nombre de jour
    IF %mois%==01 set /A datefic2=(%annee%*365)+0+%jour%
    IF %mois%==02 set /A datefic2=(%annee%*365)+31+%jour%
    IF %mois%==03 set /A datefic2=(%annee%*365)+31+28+%jour%
    IF %mois%==04 set /A datefic2=(%annee%*365)+31+28+31+%jour%
    IF %mois%==05 set /A datefic2=(%annee%*365)+31+28+31+30+%jour%
    IF %mois%==06 set /A datefic2=(%annee%*365)+31+28+31+30+31+%jour%
    IF %mois%==07 set /A datefic2=(%annee%*365)+31+28+31+30+31+30+%jour%
    IF %mois%==08 set /A datefic2=(%annee%*365)+31+28+31+30+31+30+31+%jour%
    IF %mois%==09 set /A datefic2=(%annee%*365)+31+28+31+30+31+30+31+31+%jour%
    IF %mois%==10 set /A datefic2=(%annee%*365)+31+28+31+30+31+30+31+31+30%+%jour%
    IF %mois%==11 set /A datefic2=(%annee%*365)+31+28+31+30+31+30+31+31+30+31+%jour%
    IF %mois%==12 set /A datefic2=(%annee%*365)+31+28+31+30+31+30+31+31+30+31+30+%jour%
    
    ::Calcul de la différence entre les 2 dates
    set /A datedif=%datejour%-%datefic2%
    
    ::On supprimer le fichier si la différence entre la date du jour et la date du fichier est supérieur au nombre de jours de rétention
    if %datedif% GEQ %nbjoursret% (del "%nomfic%" /Q)
    
    endlocal & goto :EOF

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    Merci

  6. #6
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    Et bien bravo c'est géniale

    Mais il y a un commentaire que tu n'a pas fini:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ::Boucle sur les
    for /F "skip=4 tokens=1,4*" %%i in ('dir /A-D /od') do set datefic=%%i& set nomfic=%%j %%k& call :fpurge
    Pourai tu me donner la suite ?


    Dé que je me sen, j'essairai de comprendre le code, c'est du beau travail

    Donc le script supprime les fichiers vieux de plus de 12 jour ? c'est bien ca ?

    Au fait ca supprime les fichiers du répertoire courant ?


    Mais au fait tu a peser aux années bisectile ?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/12/2008, 12h46
  2. projet trop lourd, a revoir completement apres 5 mois?
    Par neismarspra dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 13/11/2008, 21h56
  3. Réponses: 1
    Dernier message: 22/04/2007, 14h50
  4. Info après 3 mois de GEII : réalisable ?
    Par olivier1209 dans le forum Etudes
    Réponses: 5
    Dernier message: 19/11/2006, 23h37
  5. C++ : après un mois, que faire ?
    Par Arakhnor dans le forum Débuter
    Réponses: 3
    Dernier message: 03/08/2006, 12h25

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