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

7 réponses

  1. Lira
     
    Salut,

    tu as essayé sans les " dans la boucle for ?
    0
  2. 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
  3. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Tartopom
     
    trop cool, ça marche :) Merci beaucoup à toi, je pense que j'aurai galéré encore longtemps.
    0
  7. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    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
  8. zavenger Messages postés 817 Statut Membre 161
     
    rajoute un /B a ta commande dir
    -1