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 :

suppression d'un dossier en fonction de sa date de création


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut suppression d'un dossier en fonction de sa date de création
    Bonjour,
    je voudrais sauvegarder un fichier toutes les demi heure dans un dossier nommé jjmmaa_hhmm
    Donc j'ai fait un petit batch qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off & cls
    REM ----------------- #Constantes ------------------
    
    SET SOURCE="C:\Users\xx\Documents\Projets\FDM_IJ\Base Test\fdm_IJ_be.accdb"
    SET DESTINATION="c:\Users\xxx\Documents\Projets\FDM_IJ\Base Test\Sauvegarde\%DATE:~0,2%%DATE:~3,2%%DATE:~6,4%_%TIME:~0,2%%TIME:~3,2%\"
    
    REM ----------- #Sauvegarde Fichier  ---------------
    
    xcopy %SOURCE% %DESTINATION%
    Je voudrais maintenant supprimer dans mon répertoire Sauvegarde les dossiers datant de plus de 2 jours (soit en fonction de la date de création du dossier soit en fonction du nom du dossier)
    J'ai commencé une boucle mais je suis bloqué pour tester la date de création du dossier ou exploiter le nom du dossier.
    Avez vous une idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Rem ---------- Suppression Fichier de plus de 2 jours -------------
    SET SOURCE="c:\Users\xx\Documents\Projets\FDM_IJ\Base Test\Sauvegarde\*"
    for /d %%X in (%SOURCE%)
    Merci d'avance
    Fred

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Bonjour,

    Voici un début pour récupérer ce qui t’intéresse, tu n'a plus qu'a faire un petit algo pour la date .
    %%~na représente le nom du dossier
    %%~ta représente la date et heure

    Pour plus d'info sur les substitutions de paramètre voir 'for /?'

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET SOURCE="c:\Users\xx\Documents\Projets\FDM_IJ\Base Test\Sauvegarde\*"
    for /d %%a in (%SOURCE%) do @echo %%~nxa;%%~ta

    Sortie
    Dossier1;26/11/2015 15:06
    Dossier2;22/05/2016 21:49
    Dossier3;28/12/2015 14:11
    Je serai toi je convertirai les dates en nombre de jours (Jour Julien) afin de comparer facilement, sans se préoccuper de l'heure.
    https://fr.wikipedia.org/wiki/Jour_julien

  3. #3
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    Bonjour ericlm128
    Merci pour tes réponses
    Je vais étudier tout ca et je reviens vers toi si j ai d autres question
    Bonne journée
    Fred

  4. #4
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    Bonjour,
    Alors j'ai fait quelques essais mais je bloque encore.
    Finalement, le nom de mon répertoire est yyyymmjj_hhmm. Donc je voudrais juste faire une différence des 8 premiers caractères avec la date du jour au même format.

    Sauf que je n'arrive pas à récupérer les 8 premiers caractère du nom de mon répertoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Rem ---------- Suppression Fichier de plus de 2 jours -------------
    setlocal enableDelayedExpansion
    SET SOURCE="c:\Users\frollin\Documents\Projets\FDM_IJ\Base Test\Sauvegarde\*"
    for /d %%a in (%SOURCE%) do (
    set nomFichier=%%~na
    echo nomfichier : !nomFichier!
    
    )
    pause
    Je ne comprends pas trop les variables, un coup il faut les mettre entre%, un coup il faut les mettre entre !! et un coup il faut mettre%% devant le nom de la variable.

    Merci d'avance pour vos conseils

    Fred

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Je voudrais maintenant supprimer dans mon répertoire Sauvegarde les dossiers datant de plus de 2 jours
    le nom de mon répertoire est yyyymmjj_hhmm
    Le script affiche les dates des répertoires, tu préfère que l'on test sur le nom du répertoire plutôt que ça date ?

    '%%var' sont des variables utilisées par la boucle for (for /d %%a in (%SOURCE%) do set nomFichier=%%~na
    '%var%' sont des variables classiques
    '!var!' sont des variables classique mais réévaluées à l'intérieur d'une boucle for. Son utilisation nécessite cette ligne préalable pour fonctionner "setlocal enableDelayedExpansion"

    Donc si une variable ne change pas à l'intérieur de la boucle j'utilise '%var%'.
    Si la variable change à l'intérieur de la boucle j'utilise '!var!'.

    Mais en faite je ne t'ai pas donné du code avec '!var!' ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Imaginons que dans le dossier du script il se trouve un dossier portant ce nom "20160614_1224"

    Voici comment récupérer les parties années, mois, jour.

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    for /d %%a in ("%~dp0*") do (
    	set fold=%%~nxa
    	set year=!fold:~,4!
    	set mount=!fold:~4,2!
    	set day=!fold:~6,2!
    	echo !year!
    	echo !mount!
    	echo !day!
    )
    pause

    Sorti
    2016
    06
    14
    PS : Si tu souhaite supprimer les zéros non significative (pour tes calculs) tu peux remplacer les 3 'set' dans la boucle par des 'set /a'.

  7. #7
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    OK cool merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/11/2009, 15h37
  2. Réponses: 4
    Dernier message: 31/08/2009, 17h17
  3. Réponses: 2
    Dernier message: 18/03/2009, 15h57
  4. Réponses: 2
    Dernier message: 28/11/2007, 21h02
  5. Réponses: 7
    Dernier message: 17/11/2007, 17h05

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