[BATCH] Suppresion des x plus vieux fichiers

Résolu/Fermé
Tartopom - 6 oct. 2008 à 14:23
 Tartopom - 7 oct. 2008 à 16:39
Bonjour,

je dois faire un programme .bat qui copie le contenu d'un dossier sur un serveur, vide le dossier de base, compte le nombre de fichiers dans le dossier de destination et si il y en a plus de 100, supprime les plus vieux. Mon problème se situe au moment de supprimer les plus vieux fichiers, ça ne marche et mon invité de commandes se ferme tout seul, je ne peux donc pas voir d'où vient l'erreur. Je précise que je le PC sur lequel le script est exécuté est un Windows XP et le serveur où sont copiées les données un Windows Server 2003.

Voici la portion de code qui pose problème :

rem CALCUL DU NOMBRE DE FICHIERS A SUPPRIMER
set /a nb_files_to_del=%compt%-100

rem SUPPRESION DES FICHIERS TROP VIEUX
if %nb_files_to_del% gtr 0 (
	echo.
	echo Suppression des %nb_files_to_del% plus vieux traces
	set /a compt2=0
	for %%X in ("\\adresse_du_dossier_sur_le_serveur\*.*") do (
		if %compt2% lss %nb_files_to_del% (
			del %%X
			set /a compt2+=1
			echo %%X
		)
	)
)
echo.
echo Sauvegarde effectuee avec succes

pause


Le problème se situe dans la boucle for et j'avoue que je sèche.

Je vous remercie d'avance pour vos réponses,

Tartopom
A voir également:

7 réponses

Salut,

tu as essayé sans les " dans la boucle for ?
0
Alors j'ai un peu avancer. Le problème vient du fait que la variable compt2 ne s'incrémente pas dans la boucle for. J'ai vaguement entendu parler d'une méthode avec des ! Ca vous dit quelque chose ?
J'ai également déclarer la variable compt2 avant la portion de code que je vous ai donnée car elle ne se déclarait pas.
0
Yop,

j'ai pratiquement fini. Je vous poste la portion de code

[code]
setlocal enableDelayedExpansion

rem CALCUL DU NOMBRE DE FICHIERS A SUPPRIMER
set /a nb_files_to_del=%compt%-100
set /a compt2=0

rem SUPPRESION DES FICHIERS TROP VIEUX
if %nb_files_to_del% gtr 0 (
echo.
echo Suppression des %nb_files_to_del% plus vieux traces

for %%X in ("\\adresse_du_dossier_sur_le_serveur\*.*") do (
if !compt2! lss %nb_files_to_del% (
del %%X
set /a compt2+=1
echo suppresion du fichier %%X
)
)
)


echo.
echo Sauvegarde effectuee avec succes

pause
[/code]

Un dernier problème se pose cependant : le boucle parcourt le dossier par ordre alphabétique alors que je voudrais le parcourir par date de dernière modification (qu'importe le sens). Avez-vous une idée ?
0
Bon j'avance tout seul, à tatillons. Je continue à poster ici dans l'espoir qu'une personne qualifiée m'aide à finir mon script.

Maintenant j'arrive à parcourir le dossier dans l'ordre de dernière date de modification. Seul hic, j'ai l'impression que ce n'est plus le fichier qui est contenu dans %%X. Je m'explique, voici le résultat que me sort la console :

"Suppression des 5 plus vieux traces"
"Suppresion du fichier Le volume dans le lecteur \\mon_dossier_sur_le_serveur est Bureautique"
"Suppression du fichier Le numéro de série du volume est XXXX-XXXX"
"Suppression du fichier Répertoire de \\mon_dossier_sur_le_serveur"
"Suppression du fichier 11/08/2008 20:26 59 259 banniere.jpg"
"Suppression du fichier 21/08/2008 21:04 1 920 sounds.js"

et voici le code qui génère ça :

echo Suppression des %nb_files_to_del% plus vieux traces
	
	for /F  "delims=" %%X in ('dir /o:d "\\mon_dossier_sur_le_serveur\*.*"') do (
		if !compt2! lss %nb_files_to_del% (
			rem del %%X
			set /a compt2+=1
			echo suppression du fichier %%X
		 )
	)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
trop cool, ça marche :) Merci beaucoup à toi, je pense que j'aurai galéré encore longtemps.
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
7 oct. 2008 à 13:08
Hello
Essaye aussi de lancer ton bat directement dans une fenêtre de cmd (elle ne se fermera pas après et tu pourras voir ce qui c'est passé...)
-1
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
7 oct. 2008 à 16:13
rajoute un /B a ta commande dir
-1