Page 1 sur 2
[Résolu] supprimer des fichiers en fonction de leur dates
Posté : 20 févr. 2009 20:27
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
Re: supprimer des fichiers en fonction de leur dates
Posté : 20 févr. 2009 23:14
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 ?
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 08:43
par flox
Salut,
merci de faire partager ce script il semble super intéressant.
@+
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 10:25
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
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 11:28
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!
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 12:29
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
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 14:58
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.
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 16:15
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
Re: supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 20:31
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.
Re: [Résolu] supprimer des fichiers en fonction de leur dates
Posté : 21 févr. 2009 20:43
par Batch_Man
Donc c'est très bien danakil
Bonne soirée