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

Fermé
Arnaud - 6 nov. 2018 à 13:49
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 6 nov. 2018 à 20:45
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.
A voir également:

1 réponse

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 6 nov. 2018 à 20:48
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