Rechercher : dans
Par :

[BATCH] Suppresion des x plus vieux fichiers

Dernière réponse le 7 oct 2008 à 16:39:54 Tartopom, le 6 oct 2008 à 14:23:55 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « [BATCH] Suppresion des x plus vieux fichiers » dans :
Fichier DLL manquant ou supprimé VoirLe système se plaint d'une librairie (DLL) manquante ? Il est possible, dans une certaine mesure de la retrouver en suivant les étapes suivantes : Afficher les fichiers cachés du système Dans le Poste de travail, cliquer sur Outils, puis Options...
[MS-Dos] Lister le contenu d'un répertoire dans un fichier VoirIl peut s'avérer pratique d'effectuer le listage d'un ou plusieurs répertoires dans un fichier, afin de tenir par exemple un catalogue de fichiers. Sous MS-Dos (ou sous Windows en ouvrant une fenêtre d'invite de commande MS-Dos) il est possible...
Faire le ménage dans Ubuntu : résidus de configuration, paquets VoirDans Ubuntu, comme dans tout système, des fichiers obsolètes ou inutiles ne sont pas détruits. Il est possible de les supprimer pour gagner de la place. Un logiciel est en cours de développement (encore en version bêta) Paquets Supprimer les...
Fichier DLL VoirFormat DLL Un fichier DLL est une librairie dynamique, c'est-à-dire un fichier destiné au système d'exploitation pour lui fournir des fonctions supplémentaires. Pour plus d'informations sur les DLL, vous pouvez vous reporter à l'article suivant :...

1

Lira, le 7 oct 2008 à 13:04:11

Salut,

tu as essayé sans les " dans la boucle for ?

Répondre à Lira

2

teebo, le 7 oct 2008 à 13:08:16

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é...) Ramenez-nous Bobo sur les onglets et pendez les ergonomes av­ec leur point d'interrogation!
À bas le point d'interrogation sanglant!

Répondre à teebo

3

Tartopom, le 7 oct 2008 à 14:11:51

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.

Répondre à Tartopom

4

Tartopom, le 7 oct 2008 à 14:31:06

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 ?

Répondre à Tartopom

5

Tartopom, le 7 oct 2008 à 16:09:22

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
		 )
	)

Répondre à Tartopom

6

zavenger, le 7 oct 2008 à 16:13:05

Rajoute un /B a ta commande dir

Répondre à zavenger

7

 Tartopom, le 7 oct 2008 à 16:39:54

Trop cool, ça marche :) Merci beaucoup à toi, je pense que j'aurai galéré encore longtemps.

Répondre à Tartopom