Trier une liste de dossier pour n'en copier que certains.

Arnaud -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, voici mon problème :

Je suis sur Win 7 et je cherche à créé un batch pour les actions suivantes :

J'ai un dossier dans lequel j'ai une liste de sous-dossiers. Ces sous dossiers sont simplement nommés par leur date du jour sous le format AAAAMMJJ. (ex 20181105 ou 20181106)

Je cherche à ne copier que les 7 derniers jours.
Or je ne peux pas me baser sur l'ancienneté des dossiers.

J'ai pensé à plusieurs solutions mais je ne sais en appliquer aucune :
- Copier l'ensemble des sous-dossiers et faire un del avec exception
- Faire une liste des sous-dossiers, la trier en décroissant et ne prendre que les 7 plus grand.
- Faire un batch pour définir une date -7 / date -6 / date -5 ... etc

Tous les batch windows que j'ai pu trouver sur le net me semble très complexes et je n'arrive pas à les appliquer.

Quelqu'un aurait une solution simple ou qui fonctionne svp ?

en vous remerciant.

1 réponse

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    C'est très simple, il suffit de lister les sous-dossiers par ordre alphabétique inversé puis de copier les 7 premiers résultats :

    setlocal enableextensions enabledelayedexpansion

    set source=ton dossier source
    set destination=ton dossier de destination

    set compteur=0

    for /f "delims=" %%A in ('dir /ad /b "%source%" ^| sort /r') do (
    set /a compteur+=1
    if !compteur! LEQ 7 (robocopy "%source%\%%~A" "%destination%\%%~A" /MIR)
    )

    Je n'ai pas testé ce code mais à peu de choses près ça doit fonctionner.

    0