[Batch] Archiver le contenu de chaque sous-dossier

-Baal- Messages postés 1 Statut Membre -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Voilà mon souci. Je cherche à créer un batch qui me permettrait d'archiver tous les fichiers, sauf les 5 derniers, de chaque sous-dossier puis les supprimer. Je m'explique :

J'ai cette arborescence :

C:
|_Test
|_Dossier1
| |_toto1.txt
| |_toto2.txt
| |_toto3.txt
| |_toto4.txt
| |_toto5.txt
| |_toto6.txt
| |_toto7.txt
| |_toto8.txt
| |_toto9.txt
|
|_Dossier2
| |_toto1.txt
| |_toto2.txt
| |_toto3.txt
| |_toto4.txt
| |_toto5.txt
| |_toto6.txt
| |_toto7.txt
|
|_Dossier3
| |_toto1.txt
| |_toto2.txt
| |_toto3.txt
|
|_...


Et après exécution du batch je souhaiterais ce résultat :

C:
|_Test
|_Dossier1
| |_27-04-2016.zip
| |_toto5.txt
| |_toto6.txt
| |_toto7.txt
| |_toto8.txt
| |_toto9.txt
|
|_Dossier2
| |_27-04-2016.zip
| |_toto3.txt
| |_toto4.txt
| |_toto5.txt
| |_toto6.txt
| |_toto7.txt
|
|_Dossier3
| |_toto1.txt
| |_toto2.txt
| |_toto3.txt
|
|_...


Tout ce que je sais faire pour l'instant c'est de zipper les fichiers d'un répertoire dans un fichier à la date du jour, puis les supprimer.

"C:\Program Files\7-Zip\7z.exe" a %date:~0,2%-%date:~3,2%-%date:~6,4%.zip *.txt
Del *.txt


Sauf que je veux que ça s'applique à l'ensemble des sous-dossiers de mon dossier "test", et pour chacun de ceux-ci garder les 5 derniers fichiers.

Merci de votre aide :)

1 réponse

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

    Essaie comme ça :

    @echo off
    Setlocal enableextensions enabledelayedexpansion

    set source=C:\Test
    if not exist "%source%" (goto :eof)

    set liste=%source%\liste.txt
    set archivename=%date:~0,2%-%date:~3,2%-%date:~6,4%.7z

    set temp=%source%\temp
    if exist "%temp%" (rmdir /S /Q "%temp%")
    timeout /t 2 /nobreak
    mkdir "%temp%"

    cd %source%

    for /f "tokens=*" %%A in ('dir "*.*" /ad /b') do (
    set dossier=%%A
    dir /b /a-d /on toto*.txt > %liste%
    call :checklist
    )

    explorer /select,"%temp%"
    rmdir /S /Q "%temp%"
    Endlocal
    exit

    :checklist
    for /f "tokens=*" %%I in ('type "%liste%"') do (set /a files+=1)
    if !files! GTR 5 (call :archiver)
    goto :eof

    :archiver
    set /a nb=!files!-5
    set /a pos=1
    for /f "usebackq tokens=*" %%Z in ("%liste%") do (
    set fichier=%%Z
    if !pos! NEQ !nb! (move "%source%\!dossier!\!fichier!" "%temp%")
    set /a pos=!pos!+1
    )
    cd %source%\!dossier!
    call :doublon
    7za a -y -t7z !archivename! %temp%\
    del /F /Q "%temp%\*.*"
    goto :eof

    :doublon
    if exist "!archivename!" (set "archivename=!archivename!#" & goto :doublon)
    goto :eof
    rem
    0