Signaler

[Batch] Archiver le contenu de chaque sous-dossier [Fermé]

Posez votre question -Baal- 1Messages postés mercredi 27 avril 2016Date d'inscription 27 avril 2016 Dernière intervention - Dernière réponse le 21 avril 2017 à 21:47 par barnabe0057
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 :)

Afficher la suite 
Utile
+0
plus moins
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
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !