[Batch] Archiver le contenu de chaque sous-dossier
-Baal-
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
barnabe0057 Messages postés 14455 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 :
Et après exécution du batch je souhaiterais ce résultat :
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.
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 :)
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 :)
A voir également:
- [Batch] Archiver le contenu de chaque sous-dossier
- Dossier appdata - Guide
- Impossible de supprimer un dossier - Guide
- Fichier batch - Guide
- Mettre un mot de passe sur un dossier - Guide
- Archiver story instagram - Guide
1 réponse
Bonjour,
Essaie comme ça :
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