[BATCH] Suppresion des x plus vieux fichiers

Résolu
Tartopom -  
 Tartopom -
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

Lira
 
Salut,

tu as essayé sans les " dans la boucle for ?
0
Tartopom
 
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
Tartopom
 
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
Tartopom
 
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
Tartopom
 
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   Statut Modérateur Dernière intervention   1 793
 
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   Statut Membre Dernière intervention   161
 
rajoute un /B a ta commande dir
-1