Supprimer des fichiers précis, selon la date

Fermé
Silk7499 Messages postés 4 Date d'inscription jeudi 14 juin 2018 Statut Membre Dernière intervention 21 juin 2018 - 21 juin 2018 à 11:41
barnabe0057 Messages postés 14452 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 3 août 2024 - 22 juin 2018 à 20:25
Bonjour, je souhaiterai, comme indiqué dans le titre, supprimer des fichiers précis en fonction du nom d'un dossier et de la date du système, j'ai le début de mon programme ci dessous, et à la fin, il y a en gros ce que j'aimerai faire, j'ai cherché pas mal et je commence à me débrouiller, mais j'ai pas forcément trouvé ce que je veux sur internet... Mon code est intégralement commenté au cas ou.

Sous windows, en fichier batch .bat

Si vous pourriez m'aider ce serait super cool ! Merci à vous :)

::N'affiche pas les commandes dans le CMD
@echo off
::Repertoire où ls commandes vont s'effectuer
cd C:\FTP
::Renomme backup.conf avec la date du système au format JJ.MM.AAAA
ren "backup.conf" "%DATE:~0,2%.%DATE:~3,2%.%DATE:~6,4%.conf"
::Donne à la variable file_ext, la valeur *.conf
set file_ext="*.conf"
::donne à la variable mois, le mois actuel du systeme
set mois=%DATE:~3,2%


::Pour les fichiers qui ont l'extension .conf, faire :
For %%a in (%file_ext%) do (
::Séparer en 3 le nom des fichiers, chaque bloc est séparé par le caractère ".",
For /f "tokens=1-3 delims=." %%b in ("%%a") do (
::La variable date, prends la valeur de la 2e partie %%c, du nom du fichier (06, pour le mois de juin par exemple)
set date=%%c
::Si le dossier du mois actuel correspondant au nom du fichier n'existe pas, alors on le créer
If not exist "C:\FTP\%%c" (mkdir "C:\FTP\%%c")
::Deplacer le fichier .conf dans le dossier en question
Move /Y "%%a" "%%c\%%a" >nul

))
pause
:: Ce programme, renomme un fichier backup.conf avec la date actuelle du système, et le place dans un dossier qui se nomme par le mois actuel du système (Jusqu'ici, il fonctionne très bien).

:: Je souhaiterai idéalement que :
:: → Quand le dossier %%c, est égal à date du systeme -1, supprimer tout les fichiers .conf dans le dossier %%c et laisser le dernier.



:: → Pour éclaircir le truc avec un exemple : Le dossier 06(mois de juin) comporte 5 fichiers .conf.
:: → quand je passe en 07(juillet), il supprime 01.06.2018.conf, 08.06.2018.conf, 15.06.2018.conf, 22.06.2018.conf et laisse impérativement 29.06.2018.conf
A voir également:

1 réponse

barnabe0057 Messages postés 14452 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 3 août 2024 4 917
Modifié le 22 juin 2018 à 21:02
Bonjour,

Ton raisonnement est faux : le dossier %%c ne sera jamais égal à date du système -1

Il faut faire autrement, voilà la solution (à rajouter à la fin de ton script) :

for %%A in (01 02 03 04 05 06 07 08 09 10 11 12) do (
if exist "%%A" (if not "%%A"=="!mois!" (call :nettoyage %%A))
)

pause
exit /b 0

:nettoyage
pushd %1
for /f "skip=1 delims=" %%E in ('2^>nul dir /b /a-d %file_ext% ^| sort /r') do (del /f /q "%%~E")
popd
goto :eof

rem


0
barnabe0057 Messages postés 14452 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 3 août 2024 4 917
22 juin 2018 à 20:25
Je n'ai pas testé ce bout de code, fais-moi remonter les bugs le cas échéant.
0