[Résolu] supprimer des fichiers en fonction de leur dates

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

danakil
Batcheur débutant
Messages : 17
Enregistré le : 06 févr. 2009 13:25

[Résolu] supprimer des fichiers en fonction de leur dates

Message par danakil »

Salut à tous!
Ce matin je suis tombé sur un script batch donnant des commandes afin de supprimer des fichiers plus vieux de n jours. Afin de le faire fonctionner il faut également télécharger l'exécutable forfiles et l'intégrer dans le dossier contenant les fichiers devant être traités.
J'ai donc créer %systemdrive%\temp\test
Dans test j'ai mis diverses copies de fichier.txt trainant sur mon PC.
J'ai renommé ces fichiers en leur attribuant une date "jjmmaaaa.txt"
J'ai ensuite placé ce batch dans test:

Code : Tout sélectionner

@echo off
set path_a_nettoyer=c:\temp\test
set nb_jours=3

for /f "delims=" %%a in ('dir %path_a_nettoyer%\ /b /ad /s ^| findstr /i \%1') do (
 
 forfiles /p %%a /s /m *.* /d -%nb_jours% /c "cmd /c del @file : date >= %nb_jours% days > NUL"

)
pause
 
ainsi que forfiles.exe
Le but => supprimer les fichiers dont la date est celle du jour -3 jours.
Le batch se lance correctement mais ne fait aucune suppression - je suis depuis ce matin sur ce cas et bien que l'ayant "secoué" dans tous les sens je ne vois pas ce qui s'évertue à ne pas vouloir fonctionner.
Est-ce dû à mes copies renommées ... ayant comme date de création celle d'aujourd'hui ... je ne sais plus!

Voici les sources:
batch > http://dev.powah.net/purge.bat.txt
lien pour récupérer forfiles > ftp://ftp.microsoft.com/ResKit/y2kfix/x86/forfiles.exe
explication de la commande > http://membres.lycos.fr/fgilain/nt4RkTo ... files.html
Modifié en dernier par danakil le 21 févr. 2009 20:32, modifié 1 fois.
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: supprimer des fichiers en fonction de leur dates

Message par Batch_Man »

Salut danakil,

Là j'ai pas le temps mais essaye ceci:

Code : Tout sélectionner

@echo off
set path_a_nettoyer=c:\temp\test
set nb_jours=3

for /f "delims=" %%a in ('dir "%path_a_nettoyer%\" /b /ad /s') do (
     forfiles /p %%a /s /m *.* /d -30 /c "cmd /c del @file : date >=30 days > NUL"

)
pause
Il sert à quoi ton %1 ?
Avatar du membre
flox
Administrateur du site
Messages : 158
Enregistré le : 18 janv. 2008 22:05

Re: supprimer des fichiers en fonction de leur dates

Message par flox »

Salut,

merci de faire partager ce script il semble super intéressant.


@+
danakil
Batcheur débutant
Messages : 17
Enregistré le : 06 févr. 2009 13:25

Re: supprimer des fichiers en fonction de leur dates

Message par danakil »

Salut à tous!
Merci des encouragements flox

Batch_Man
Effectivemment les syntaxes des commandes sont complétements erronées, surtout au niveau de la ligne forfiles
Concernant %1, je pense que le gars a essayer d'inclure en variable quelque chose comme ceci: ^| findstr /i /c:".txt" ou autre ...
Donc j'ai carrément supprimé dans un premier temps la boucle qui gére plus de contraintes qu'autre chose.
Je prends le sujet à l'envers afin de faire fonctionner forfiles avant d'y inclure des conditions.

Voici une synthaxe qui fonctionne correctemment:

Code : Tout sélectionner

set fich=c:\temp\test

forfiles -p%fich% -s -m*.txt -c"cmd /c echo @FILE est un fichier texte"
pause
 
Là s'affiche tous les fichiers .txt contenu dans test!

Maintenant inclure une variable date, c'est pas évident. D'après le tuto sur forfiles la prise en compte de la date se présente ainsi:
[-d -jjmmaa] et doit être mise en forme pour l'affichage ainsi : >= jjmmaa :jours
ce qui donne ceci:

Code : Tout sélectionner

set fich=c:\temp\test
set jour=3

forfiles -p%fich% -s -m*.txt -d-%jour% -c"cmd /c echo @FILE date >=%jour% :jours"
pause
 
Cela fonctionne nada.
Pour l'instant je n'arrive pas à inclure une variable date afin de comparer la date du jour avec la date de création des fichiers.

Nota:
J'ai remplacé del par echo dans l'immédiat :mrgreen:
danakil
Batcheur débutant
Messages : 17
Enregistré le : 06 févr. 2009 13:25

Re: supprimer des fichiers en fonction de leur dates

Message par danakil »

Cela avance!
Voici le script qui réussi à récupérer les fichiers textes en fonction de leur dates de création.

Code : Tout sélectionner

set fich=c:\temp\test
set jour=3

forfiles -p%fich% -s -m*.txt -d-%jour% -c"cmd /c echo @FILE >> C:\temp\resultat.txt"
pause
 
J'obtiens les noms des fichiers dans resultat.

Si je change echo par del, resultat.tx est vide mais les fichiers plus vieux que n jour donnés par set jour= sont supprimés.
Il reste à le mettre dans une forme correct ...
set jour= n'est pas limité, je suis remonté jusqu'à 3000 jours en arrière pour voir un peu - commande echo bien sur!
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: supprimer des fichiers en fonction de leur dates

Message par Batch_Man »

Salut,

Moi j'ai déjà fais un script qui liste les fichiers de moins de 30 jours, et c'est la cata au début car je le fais SANS commande externe, mais je ne le mettrais pas sur internet, voilà deux solutions non testées:

Code : Tout sélectionner

set fich=c:\temp\test
set jour=3

for /f "tokens=*" %%i in ('forfiles -p%fich% -s -m*.txt -d-%jour% -c"') do (
@del /q %%i >> C:\temp\resultat.txt")
pause
Ou bien

Code : Tout sélectionner

set fich=c:\temp\test
set jour=3

forfiles -p%fich% -s -m*.txt -d-%jour% -c"cmd /c echo @FILE >> C:\temp\resultat.txt"
for /f "tokens=*" %%a in ('type "C:\temp\resultat.txt"') do @del /q %%a
Batch_Man
danakil
Batcheur débutant
Messages : 17
Enregistré le : 06 févr. 2009 13:25

Re: supprimer des fichiers en fonction de leur dates

Message par danakil »

OK! et super!
Je vais tester tes commandes.
Tiens voici un script qui fonctionne trés bien:

Code : Tout sélectionner

set fich=c:\temp\test
set jour=
set /p jour= donner le nombre de jours a deduire:

forfiles -p%fich% -s -m*.txt -d-%jour% -c"cmd /c del @FILE"
pause
 
Avec tes infos et ce que j'ai sous le coude je vais essayer d'établir un script évitant d'utiliser une commande externe.
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: supprimer des fichiers en fonction de leur dates

Message par Batch_Man »

Je te préviens c'est très dur, il faut savoir gérer les boucles, les %, set /a, dir, if et bien d'autres
danakil
Batcheur débutant
Messages : 17
Enregistré le : 06 févr. 2009 13:25

Re: supprimer des fichiers en fonction de leur dates

Message par danakil »

Hello Batch_Man!
Je comprends parfaitement ce que tu affirmes et je suis de ton avis sur la responsabilité concernant l'affichage de ces informations.
Donc pour moi le cas forfiles est résolu.
Grand merci pour ton aide.
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

Re: [Résolu] supprimer des fichiers en fonction de leur dates

Message par Batch_Man »

Donc c'est très bien danakil :)

Bonne soirée ;)
Répondre