Script pour supprimer automatiquement les plus vieux dossiers

Résolu
anakin6661 Messages postés 90 Statut Membre -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai encore besoin d'un coup de main concernant un script pour automatiser une suppression de sous dossier.
De façon automatique, une fois par semaine, un nouveau sous dossier est créé par robocopy (sauvegarde d'un dossier partagé) sur un NAS Western Digital.
Pour ne pas saturer le NAS destinataire de ces sauvegardes, je cherche à mettre en place un script sur un de nos serveur en tache planifié.
Le dossier contient une dizaine de sous dossier de 250Go environ.
Je cherche à automatiser la suppression du plus vieux dossier.
Nous sommes obligé de passer par robocopy et non par un logiciel style cobian car le système shadow copy est déjà utilisé sur le serveur de fichier pour une autre sauvegarde.

Je bute totalement sur la façon de sélectionner le sous dossier le plus anciens
un problème est aussi à prendre en compte, la sélection doit ce passer à la racine de ce dossier et ne pas entrer dans les sous dossiers contenant encore toute une multitude de dossier, etc ... pour ne pas supprimer des dossiers ailleurs que le plus vieux sous dossier.
Nous avions trouvé un fichier vbs qui nous sélectionnait le plus vieux dossier mais qui n'arrivait pas à supprimer sur le NAS (question de droit en tache planifié)
Ne sachant pas comment mettre les informations de connexion sur un vbs, je suis obligé de passer par un .bat
à moins que quelqu'un m'apporte des éclaircissement sur le vbs qui m'est totalement inconnu

Le vbs que j'ai essayé d'utiliser:

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set MonRep=FSO.GetFolder("D:\MonDossier")

datemin = Date()

for each sf in monrep.subfolders
If sf.datelastmodified < datemin then
datemin = sf.datelastmodified
chemin = sf.path
end if
next

set rep_to_delete = FSO.GetFolder(chemin)

rep_to_delete.delete


--
Merci Aux personnes qui nous répondent sans demander quoi que ce soit en retour si ce n'est du respect et peu de fautes ... :)

3 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Dans mon script, PUSHD permet de monter un lecteur réseau temporaire, sans authentification.

    Si jamais tu as besoin de t'authentifier auprès du NAS, il faut utiliser la commande NET USE :
    Setlocal enableextensions enabledelayedexpansion

    net use * \\adresse_NAS\nom_du_partage /user:user password

    cd /d Z: (il faut indiquer la lettre du lecteur réseau, Z: par exemple)

    for /F "tokens=*" %%A in ('dir /b /ad /o-d "*.*"') do (set cible=%%~nA)

    rmdir /S /Q "!cible!"

    Endlocal

    exit
    1
  2. daminator25 Messages postés 3342 Date d'inscription   Statut Membre Dernière intervention   311
     
    Bonjour,

    Et tu ne peux pas numéroter tes dossiers ou y inscrire la date dans le nom ?
    Ainsi il serait très simple de détecter le plus ancien.
    0
    1. anakin6661 Messages postés 90 Statut Membre 6
       
      La sauvegarde est exporté dans un dossier renommé en fonction de la date de création de la sauvegarde, "%year%%month%%day%Nom_Dossier"
      1 sauvegarde par semaine, mais je bloque pour la sélection du dossier par le nom ou par la date de création
      0
    2. anakin6661 Messages postés 90 Statut Membre 6
       
      NB: merci d'avoir déplacé le sujet dans la bonne section
      0
    3. daminator25 Messages postés 3342 Date d'inscription   Statut Membre Dernière intervention   311
       
      Malheureusement je ne connais pas bien les batch je ne saurais te conseiller. J'ai plutot une logique POO et en batch c'est pas tout a fait ça ...
      0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    Je ne peux pas t'aider pour ton script VBS, par contre c'est très simple de trouver le plus vieux dossier en batch :

    dir /ad /od ton dossier

    Le commutateur /AD permet de cibler les dossiers et donc d'exclure les fichiers.

    Le commutateur /OD permet de lister par ordre chronologique, en tenant compte de la date de dernière modification, pas de la date de création.

    Tu associes cette commande à une boucle for pour pouvoir stocker le "dossier le plus vieux" dans une variable appelée !cible! :

    Setlocal enableextensions enabledelayedexpansion

    set dossier=nom de ton dossier

    pushd %dossier%

    for /F "tokens=*" %%A in ('dir /b /ad /od "*.*"') do (set cible=%%~nA)

    rmdir /S /Q "!cible!"

    popd

    Endlocal

    exit

    Sauf que la commande RMDIR n'effacera pas le dossier si celui-ci n'est pas vide, par conséquent je te suggère de passer par une commande externe telle que del3.exe à télécharger ici :

    http://www.info2000.biz/download/del3.zip

    Donc la ligne avec la commande RMDIR sera à remplacer par celle-là :
    del3.exe /b "!cible!"
    0
    1. anakin6661 Messages postés 90 Statut Membre 6
       
      Je viens de tester, ça supprime le dossier le plus récemment modifié et non le plus ancien.
      Mais déjà ça sélectionne un dossier, de quoi m'aider à trouver comment définir le bon dossier.
      J'en suis donc bien plus loin qu'avant, Merci
      0
      1. barnabe0057 > anakin6661 Messages postés 90 Statut Membre
         
        Oups ! Oui effectivement j'ai fait l'inverse, voilà la correction :
        Setlocal enableextensions enabledelayedexpansion

        set dossier=nom de ton dossier

        pushd %dossier%

        for /F "tokens=*" %%A in ('dir /b /ad /o-d "*.*"') do (set cible=%%~nA)

        rmdir /S /Q "!cible!"

        popd

        Endlocal

        exit
        0
    2. anakin6661 Messages postés 90 Statut Membre 6
       
      Merci pour la correction.
      Ça fonctionne parfaitement en local, maintenant je vais tester la semaine prochaine sur une tache planifiée si la suppression du fichier le plus ancien passe sur le NAS western Digital
      Je te tiens au jus
      0
    3. anakin6661 Messages postés 90 Statut Membre 6
       
      Pour la création des dossiers de test, voila ce que j'ai utilisé:

      echo off
      cls

      echo ---------------------------------------------------------------------------
      echo Instructions
      echo ---------------------------------------------------------------------------

      echo Pour effectuer les tests, j'ai besoin de
      echo - un dossier moins anciens que la date
      echo - plusieurs dossiers plus anciens que la date
      echo dans le dossier moins anciens que la date, je dois avoir plusieurs sous dossiers plus anciens et moins anciens que la date

      echo Notre date de reference sera le 12/05/2017

      echo ---------------------------------------------------------------------------
      echo creation du dossier moins anciens
      echo ---------------------------------------------------------------------------

      echo creation du dossier recent
      md C:\Scripts\Test_suppression_dossier\dossier_recent
      echo le dossier plus anciens est maintenant cree

      echo ---------------------------------------------------------------------------
      echo création des dossiers et sous dossiers plus anciens
      echo ---------------------------------------------------------------------------
      echo.
      echo avant nous devons garder la référence du jours :
      echo definition du jour
      SET day=%date:~0,2%

      echo definition du mois
      SET month=%date:~3,2%

      echo definition de l annee
      SET year=%date:~6,4%

      echo dossier et sous dossier 1 ***********************

      echo configuration de la date plus ancienne
      date 01/04/2017
      echo création du dossier
      md C:\Scripts\Test_suppression_dossier\dossier_ancien1
      md C:\Scripts\Test_suppression_dossier\dossier_ancien1\sous_dossier_ancien1
      echo le dossier plus anciens est maintenant cree
      echo.

      echo création du sous dossier ancien
      md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_ancien1
      echo le sous dossier est maintenant cree
      echo.

      echo dossier et sous dossier 2 **********************

      echo configuration de la date plus ancienne
      date 01/03/2017
      echo création du dossier
      md C:\Scripts\Test_suppression_dossier\dossier_ancien2
      md C:\Scripts\Test_suppression_dossier\dossier_ancien2\sous_dossier_ancien2
      echo le dossier plus anciens est maintenant cree
      echo.

      echo création du sous dossier ancien
      md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_ancien2
      echo le sous dossier est maintenant cree
      echo.

      echo dossier et sous dossier 3 **********************

      echo configuration de la date plus ancienne
      date 01/02/2017
      echo création du dossier
      md C:\Scripts\Test_suppression_dossier\dossier_ancien3
      md C:\Scripts\Test_suppression_dossier\dossier_ancien3\sous_dossier_ancien3
      echo le dossier plus anciens est maintenant cree
      echo.

      echo création du sous dossier ancien
      md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_ancien3
      echo le sous dossier est maintenant cree
      echo.

      echo reconfiguration de l'ordinateur a la date du jours **************
      date %day%/%month%/%year%
      echo verification du retour a la date du jour
      date /t
      echo.

      echo création du sous dossier recent
      md C:\Scripts\Test_suppression_dossier\dossier_recent\sous_dossier_recent
      echo le sous dossier est maintenant cree
      echo.

      echo le dossier est maintenant pret pour les tests



      pause
      0