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 :

Conserver uniquement les backups des 7 derniers jours


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Conserver uniquement les backups des 7 derniers jours
    Salut a tous,

    J'ai cree un fichier batch pour faire un backup quotidien de ma base de donnee. Le fichier backup est sous la forme: nom_%annee%%mois%%jours%
    Donc chaque jour j'ai une nouveau fichier.
    Maintenant j'aimerais ameliorer mon batch pour qu'il me supprime le fichier qui a plus d'une semaine. Je veux conserver que les 7 derniers backups.
    Je sais pas trop comment m'y prendre.

    Voici mon batch:
    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
    @echo off
    
    ...
    
    REM Elements de la date
    for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
     set day=%%i
     set month=%%j
     set year=%%k
    )
    
    REM Elements de l'heure
    for /f "tokens=1-3 delims=: " %%i in ("%time%") do (
     set hh=%%i
     set nn=%%j
    )
    
    REM Commande de back up
    %PGBIN%pg_dump -i -h %PGHOST% -p %PORT% -U %PGUSER% -F c -b -D -v -f "%BACKUPDIR%db_ag-%year%%month%%day%.backup" db_ag

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Salut!
    Voici un script non testé:
    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
    @echo off
    
    rem ———————————————————-
    rem Nettoyage des dossiers
    rem Suppression des fichiers de plus de N jours
    rem ———————————————————-
    
    rem Configuration
    
    set path_a_nettoyer=%systemdrive%\db_ag
    set nb_jours=7
    
    rem Suppression des fichiers vieux de plus de 7 jours
    
    for /f “delims=” %%a in (’dir %path_a_nettoyer%\ /b /ad /s ^| findstr /i \%1') do (
     
     forfiles /p %%a /s /m *.* /d -%nb_jours% /c “cmd /c del @file : date >= %nb_jours% days > NUL”
    
    )
    Je pars du principe que le dossier "db_ag" est sous l'O.S
    Il te faut aussi télécharger la commande "forfiles" qui n'existe pas sous DOS:
    ftp://ftp.microsoft.com/ResKit/y2kfix/x86/forfiles.exe
    Fait aussi une copie de db_ag avant de lancer le script.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Salut,

    Je viens de le tester mais voila ce que j'obtiens avec un echo ON:
    E:\test>batch

    E:\test>rem ùùùùùùùùùùùùùùùùùùù-

    E:\test>rem Nettoyage des dossiers

    E:\test>rem Suppression des fichiers de plus de N jours

    E:\test>rem ùùùùùùùùùùùùùùùùùùù-

    E:\test>rem Configuration

    E:\test>set path_a_nettoyer=E:\test

    E:\test>set nb_jours=7

    E:\test>rem Suppression des fichiers vieux de plus de 7 jours
    ö was unexpected at this time.
    E:\test>for /f ôdelims= ö %a in (Ædir E:\test\ /b /ad /s ^| findstr /i \') do (
    E:\test>
    Mon code (pratiquement pas modifie):
    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
    @echo on
    
    rem ———————————————————-
    rem Nettoyage des dossiers
    rem Suppression des fichiers de plus de N jours
    rem ———————————————————-
    
    rem Configuration
    
    set path_a_nettoyer=E:\test
    set nb_jours=7
    
    rem Suppression des fichiers vieux de plus de 7 jours
    
    for /f “delims=” %%a in (’dir %path_a_nettoyer%\ /b /ad /s ^| findstr /i \%1') do (
     
     forfiles /p %%a /s /m *.* /d -%nb_jours% /c “cmd /c del @file : date >= %nb_jours% days > NUL”
    
    )
    (Le dossier "test" contient tous les fichiers backup et forfiles.exe est dans le meme dossier)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Re!
    db_ag c'est quoi dans le script initial?

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    db_ag c'est juste le nom de la base de donnee qui est backed up.

    En la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %PGBIN%pg_dump -i -h %PGHOST% -p %PORT% -U %PGUSER% -F c -b -D -v -f "%BACKUPDIR%db_ag-%year%%month%%day%.backup" db_ag
    peut se lire comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %path_de_pg_dump.exe%pg_dump -i -h %nom_seveur_base_de_donnee% -p %PORT% -U %nom_utilisateur% -F c -b -D -v -f "%path_du_backup%db_ag-%year%%month%%day%.backup" db_ag
    Donc pour aujourd'hui, par exemple, cette commande cree un fichier db_ag-20090220.backup de la base de donne db_ag dans le dossier %BACKUPDIR%

    En fait, ce qu'il faut savoir, c'est que chaque jour un fichier db_ag-yyyymmdd.backup est cree dans un dossier. Et j'aimerais limiter le nombre de fichier au 7 derniers crees.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    OK!
    Le dossier Backupdir contenant les "db_ag" est où sur ton PC?
    Sur l'O.S, sur le Bureau ..?

  7. #7
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Ils sont dans un dossier sur le C:\
    Mais pour le moment c'est E:\test\

    Pourquoi tu as besoin savoir exactement ou se trouve les fichiers?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Salut!
    Je demandais cela simplement pour t'aider.
    Je te laisse adapter le script à ton cas.

    Voici le script testé cette fois-ci; Il fonctionne trés bien.
    set fich=afficher le chemin complet du dossier cible
    set jour=
    set /p jour= donner le nombre de jours a deduire:

    forfiles -p%fich% -s -m*.txt -d-%jour% -c"cmd /c del @FILE"
    pause
    Pour set fich=
    exemple de chemin c:\sauvegarde\test <-- test contiendrait les backups
    Pour set jour=
    Tu dois donner le nombre de jours à soustraire : 7 pour toi.
    Attention quand même car les suppressions sont définitives ...
    Info : ce batch se base uniquement sur la date de création des fichiers cibles et ne peux être utilisé qu'avec forfiles.exe

    Bonne continuation!

    danakil1

  9. #9
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f “delims=” %%a in (’dir %path_a_nettoyer%\ /b /ad /s ^| findstr /i \%1') do (
     
     forfiles /p %%a /s /m *.* /d -%nb_jours% /c “cmd /c del @file : date >= %nb_jours% days > NUL”
    
    )
    Il semble qu'il y ait un problème avec tes guillemets :
    Remplace “delims=” par "delims=" et (’dir %path_a_nettoyer%\ /b /ad /s ^| findstr /i \%1') par ('dir %path_a_nettoyer%\ /b /ad /s ^| findstr /i \%1')

    Tu utilises notepad pour faire tes batchs ?
    Maitrisez toutes les subtilités de Windows 8 en lisant la FAQ Windows 8. N'hésitez pas à proposer vos Q/R.
    _ _ _
    Découvrez toutes les facettes de Windows 7 et maitrisez toutes ses fonctionnalités grâce au livre Windows 7 Avancé

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Salut shawn12!
    Je présume que le message m'est destiné
    Dans le premier post j'ai bien précisé "batch non testé" car je l'avais récupéré comme tel sur la toile. Lorsque j'ai vu les résultats je l'ai testé de mon côté et j'ai constaté egalement un problème de script sur les guillemets ainsi que sur la syntaxe des commandes utilisées qui sont compléments erronées:
    "^| findstr /i \%1" devait-être quelque chose comme ceci initialement:
    "^| findstr /i /c:".txt" ou équivalent.

    Donc j'ai repris le batch complément afin de l'adapter au cas de Minsk
    Dans mon dernier post ormis celui-ci le script est testé et fonctionne parfaitement.

    Sinon perso, j'utilise PowerBatch mais pour ce cas notepad++ aura suffit.

    Bon dimanche!


    danakil1

  11. #11
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut


    Ton dernier script fonctionne!

    Merci

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    De rien!

  13. #13
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Maintenant que le code fonctionne pour mon dossier test. J'aimerais le faire fonctionner pour mes vrais backup.
    Et je me retrouve confronte a un nouveau probleme!

    En fait, les backups sont crees sur une autre machine que celle qui fait tourner le fichier bat.

    Et dans la commande pour supprimer les fichiers y a cette ligne: qui, je suppose, lance une seconde commande pour supprimer les fichiers. Le probleme c'est que cette seconde commande ne fonctionne pas sur la bonne machine apparemment. Et j'obiens ces erreurs:
    '\\server\Database'
    CMD.EXE was started with the above path as the current directory.
    UNC paths are not supported. Defaulting to Windows directory.
    Could Not Find C:\Windows\db_ag-20090206.backup
    '\\server\Database'
    CMD.EXE was started with the above path as the current directory.
    UNC paths are not supported. Defaulting to Windows directory.
    Could Not Find C:\Windows\db_ag-20090207.backup

    ...

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Re!

    Si je comprends bien tu as deux bécanes et la deuxième servirait en autre à récupérer tes backups.
    Je ne vois pas 36 solutions en utilisant la commande externe forfiles.exe

    Places directemment le batch (de suppression) ainsi que forfiles sur le PC de tes backups...
    Afin d'être sûr de ne pas faire de boulettes car avec la commande del les dossiers sont irrémédiablement supprimés, voici un script dans lequel je remplace del par echo.
    @echo off
    set fich=C:\Windows
    set jour=
    set /p jour= donner le nombre de jours a deduire:

    forfiles -p%fich% -s -m*.backup -d-%jour% -c"cmd /c echo @FILE >> C:\Windows\resultat.txt"
    pause
    Dans Windows tu vas obtenir un fichier texte nommé "resultat.txt" est contenant les noms des dossiers plus vieux de njours. Ouvres ce document et vérifie que les fichiers cités sont biens plus vieux de njours.
    > clic droit sur le dossier > Propriétés --> date de création.

    Si tout cela est OK, on modifie ton batch pour activer les suppressions.


    je suppose, lance une seconde commande pour supprimer les fichiers
    Effectivemment et cela bloque car forfiles doit être dans le fichier cible ou alors dans un répertoire parent.

  15. #15
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    J'ai teste le script et il marche bien: les vieux fichiers .backup uniquement sont bien supprime.

    J'avais pense a la solution qui est de creer un second batch contenant ce script, qui tournerait sur la machine hebergeant les backups. Mais c'est la solution de facilite et ca serait vraiment mieux si tout (la creation nouveaux et la suppression des vieux backups) etait regroupe dans le meme batch et execute qu'une seule fois.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Re,

    si tout (la creation nouveaux et la suppression des vieux backups) etait regroupe dans le meme batch et execute qu'une seule fois.
    Tu me parles de vouloir regrouper ton batch (premier post) avec celui-ci?

  17. #17
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par danakil1 Voir le message
    Re,


    Tu me parles de vouloir regrouper ton batch (premier post) avec celui-ci?
    Oui c'est ca

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Là j'ai quelques difficultés pour te repondre.

    Tu as un batch effectuant des sauvegardes sur le pc1 qu'il transfère sur le pc2. Cela aurait été tout sur le même PC que j'aurai pu te répondre tout de suite ...

    Si cela fonctionne sur le même mode, il te faut utiliser la commande call dans ton premier batch (sauvegarde) pour appeler le second (suppression). On revient toujours au même problème avec forfiles ... Le batch de suppression + forfiles sur le 2éme PC cela fonctionne, mais forfiles sur le premier pc et appelé pour supprimer des fichiers sur le pc2 je n'en sais rien du tout.

    Ce que tu peux tester éventuellement.
    N'ayant pas le script complet du batch pc1 est de rajouter ceci en fin de script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call :[Chemin] & goto:eof
    [Chemin] s'écrira du style C:\rep\backups\???.bat ou "C:\rep\backups\???.bat.
    [Chemin] = chemin complet d'accès au batch du dossier contenant le batch suppression et forfiles.
    & goto:eof renverra la fin d'exécution du batch de suppression vers le batch de lancement afin de le fermer également.

    Teste et tiens moi au courant! De mon côté je vais voir si je trouve mieux.

  19. #19
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par danakil1 Voir le message
    Le batch de suppression + forfiles sur le 2éme PC cela fonctionne,
    Je peux mettre forfiles dans le dossier des backups c'est pas un probleme.
    Seulement je voudrais juste executer un seul batch sur le 1er pc.

    Donc comment tu fais pour le faire fonctionner avec forfile dans le dossier contenant les backups? Moi j'ai essaye mais j'obtiens toujours la meme erreur:
    UNC paths...
    Il n'aime pas les adresses du type \\server\path\

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Salut!
    Tu as essayé en appelant le deuxième batch et cela bloque au niveau du chemin d'accès je présume?

    Peut-être pourrais-tu mettre une tâche planifiée sur le deuxième PC qui activerait le batch de suppression tous les jours à telle heure ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Récupérer les données des 30 derniers jours de l'année
    Par ableur dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 12/02/2015, 09h31
  2. Réponses: 3
    Dernier message: 20/02/2014, 15h34
  3. Récupérer les enregistrements des 3 derniers mois
    Par cmoiscrat dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/07/2006, 09h39
  4. Rechercher les documents des 7 derniers jours...
    Par titoumimi dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/03/2006, 16h29
  5. Filtre sur les données des 3 derniers mois?
    Par Arkalys dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 09h02

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