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 :

Script purge fichiers d'un répertoire [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Bonjour à tous,

    Je ne connais absolument rien au Batch ....
    Et je dois faire un script qui permet de parcourir un répertoire et les sous-répertoires qu'il comprend pour :
    - zipper les fichiers qui datent de plus de 10jours et placer les .zip dans un repertoire d'archive (et effacer le fichier déjà zippé).
    - Supprimer les .zip de plus de 30 jours.

    J'ai fait un tour sur différents posts du forum
    Discussion 1
    Discussion 2
    la fonction DateToDays indiqueé par minnesota


    Et j'ai pu faire le code ci-dessous.
    Mes problèmes et questions sont les suivantes :

    1°) je fais une boucle FOR pour récupérer un à un les noms des fichiers du répertoire, mais avec les options /R, /F etc je ne suis pas sûr de vraiment boucler sur les noms de fichiers : Pourriez-vous me corriger si j'ai mal structuré mon "FOR"
    2°) Comment récupérer la date de dernière modif d'un fichier à partir de ses noms et emplacement ? Ou au pire, sa date de création
    3°) Pour faire appel à une fonction définie dans un autre .bat (DateToDays.bat), n'ai-je pas juste à le place dans le même répertoire que mon purge.bat et l'appeler comme dans mon code ?

    4°) Y a-t-il des actions à faire pour que zipper puisse se faire avec pkzip étant donné qu'il n'est pas inclus dans DOS ? Autre solution ?

    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
    
    
    
    :: Scrip qui zippe les fichiers de logs de plus de 10 jours et supprime les zip de plus de 30 jous
    
    
    echo off
    
    set day_today=%Date:~0,2%
    set mth_today=%Date:~4,2%
    set year_today=%Date:~7,4%
    call :DateToDays %year_today% %mth_today% %day_today% days
    
    
    REM je fais ici un FOR pour boucler récupérer un à un les noms des fichiers du répertoire, je ne suis pas sûr de vraiment boucler sur les noms de fichiers
    FOR /R %%i IN ('dir /B "%rep_log%"' ) do (
    set nomfichier = %%i 
    
    ::Traitement des fichiers log
    set datemodif=date de dernière modif de %nomfichier% REM ici je ne sais pas comment récupérer la date de dernière modif du fichier de log à partir de son nom
    set day_modif=%datemodif:~0,2%
    set mth_modif=%datemodif:~4,2%
    set year_modif=%datemodif:~7,4%
    call :DateToDays %year_today% %mth_today% %day_today% days_modif  REM je fais appel à la fonction Datetodays dont le lien était dispo dans un des posts.
    set /A anciennete = days-days_modif
    
    if anciennete GTR 10 (
    MOVE C:\logs\%nomfichier% E:\archives
    pkzip E:\archives\%nomfichier%)
    
    )
    ::Traitement des fichiers zippé
    FOR /R %%i IN ('dir /B "%rep_archive%"' ) do (
    set nomfichier = %%i
    set datemodif=date de dernière modif de %nomfichier% REM ici je ne sais pas comment récupérer la date de dernière modif du fichier zip
    ::Traitement_zip
    
    set day_modif=%datemodif:~0,2%
    set mth_modif=%datemodif:~4,2%
    set year_modif=%datemodif:~7,4%
    call :DateToDays %year_today% %mth_today% %day_today% days_modif
    set /A anciennete = days-days_modif
    
    if anciennete GTR 30 (
    DEL  E:\archives\%nomfichier%
    
    )
    Merci d'avance pour vos orientations

  2. #2
    Membre expérimenté Avatar de plopi
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mars 2011
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 191
    Par défaut
    Citation Envoyé par shakur221 Voir le message
    2°) Comment récupérer la date de dernière modif d'un fichier à partir de ses noms et emplacement ? Ou au pire, sa date de création

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for /f "tokens=1,2" %i in ('dir %Chemin/NomFicher%^| find /i "NomFicher" ') do echo %i %j
    Mais il doit il y avoir mieux...

    Citation Envoyé par shakur221 Voir le message
    3°) Pour faire appel à une fonction définie dans un autre .bat (DateToDays.bat), n'ai-je pas juste à le place dans le même répertoire que mon purge.bat et l'appeler comme dans mon code ?
    Normallement oui

    Citation Envoyé par shakur221 Voir le message
    4°) Y a-t-il des actions à faire pour que zipper puisse se faire avec pkzip étant donné qu'il n'est pas inclus dans DOS ? Autre solution ?
    7zip Ligne de commandes

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Merci plopi,
    je pense que cela pourra bien m'aider.
    je rebosse mon script et vous tiens au courant

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    J'arrive bien en testant sur la console à récupérer les dates de modif de fichier. Merci!
    Mais quand j'éxécute mon code , j'ai un retour comme quoi : une variable n'était pas attendu à ce moment... Et mon FOR est stoppé juste après.
    Ci-dessous le retour de la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C:\Users\shakur>call :traitement_repertoire C:\qvlogs
    C:\Users\shakur>set repertoire=C:\qvlogs
    repertoire| was unexpected at this time.
    C:\Users\shakur>for /f "tokens=1,3,4" repertoire^| find "/" ') do (
    C:\Users\shakur>
    Par ailleurs j'ai un label qui s'auto-appelle dans mon script,
    Est-ce que ça ne fout pas le chaos dans
    - les variables %%1 , %%2 ...?
    - les tokens (%%i, %%j ...) que je récupère dans les boucles FOR ?

    Mon vrai problème actuel :
    je récupère les noms de fichiers et dates de dernières modifs des fichiers avec une autre boucle FOR.
    Seulement les noms de fichiers (file) se mettent à jour, mais les dates(filedate) non, les dates restent sur la valeur du 1e fichier trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for  /R %rep_log% %%i in (*.*) do (
    set file="%%i"
    echo file c'est %file%
    
    set filedate=%%~ti
    echo filedate c'est %filedate%
    :: la valeur de filedate ne se met pas à jour
    )

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    En réponse à ton mp, pour avoir la date de dernière modification des fichiers d'une arborescence, il faut utiliser le modificateur t de l'instruction for conjointement à la commande dir :

    exemple, depuis le dossier parent, sinon remplacer * par le répertoire cible cible/* :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    for /f "tokens=*" %%i in ('dir /s /b /a-d *') do call :validate "%%~i" %%~ti
    pause
    goto :eof
    
    :validate
    set file=%~1
    set dt=%~2
    echo %file% %dt%
    goto :eof
    Sinon pour que ton code fonctionne, il faut activer l'expansion des variables d'environnement et utiliser la syntaxe qui va avec.

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Désolé pour le retard dans la réaction, j'ai été pris par pas mal d'autres sujets.

    Merci Minnesota, ces indications m'ont aidé à finaliser le script depuis ce matin.
    Thanks.
    Je passe le sujet à résolu

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

Discussions similaires

  1. [PowerShell] Mise à jour de l'AD par script de lecture dans un répertoire de fichier XML
    Par Santah dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 20/03/2012, 07h41
  2. Script shell purge fichiers
    Par jicaygg dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 02/02/2011, 15h25
  3. Réponses: 2
    Dernier message: 15/06/2009, 18h41
  4. Script retournant la liste des fichiers d'un répertoire selon la date et la taille
    Par desolation1985 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/06/2009, 18h29
  5. Script Shell : lister tous les fichiers d'un répertoire et sous rép
    Par raton_laveur dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 22/01/2009, 16h43

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