[..] Suppression de répertoires en fonction date d

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
vincentr
Niveau 3
Niveau 3
Messages : 35
Enregistré le : jeu. 12 mars 2009 09:02
Status : Hors ligne

[..] Suppression de répertoires en fonction date d

#1

Message par vincentr »

Bonjour,
je fais des backups de +sieurs répertoires dans un répertoire c:\sauvegarde.
Je nomme ce répertoire avec la date du jour (ex 02-12-2009).
Ce qui va me donner dans mon arborescence c:\sauvegarde\02-12-2009.
Je souhaiterais donc supprimer les répertoires de plus de 8 jours. Voici mon code :
---------------------------------------------------------------------------

Code : Tout sélectionner

#include <Date.au3>
#include <File.au3>
#include <Array.au3>


$rep="c:\sauvegarde\"
$FileList=_FileListToArray($rep)

If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
EndIf

for $i = 1 to $FileList[0]
    $Date_backup=$FileList[$i]
    $DF = FileGetTime ("c:\sauvegarde\" & $Date_backup , 1 )
    $DateCalc = $DF[0] & "/" & $DF[1] & "/" & $DF[2] 
    $DateCalc = _DateDiff ( 'D' , $DateCalc , _NowCalc ( ) )

If $DateCalc > 1 then 
    $supp = $rep & '\' & $FileList[$i]
    DirRemove($supp, 1)
endif

Next
---------------------------------------------------------------------------
Voici mon problème, sur mon PC en XP, je n'ai pas de messages d'erreur or sur mon serveur 2003,
j'obtiens ce message d'erreur :

Line -1:
Error: Subscript used winth non-Array variable


Je suis preneur de toutes idées.
Merci beaucoup.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Suppression de répertoires en fonction date d

#2

Message par Tlem »

A première vue, votre problème doit sûrement venir de cette ligne :

Code : Tout sélectionner

$DF = FileGetTime ("c:\sauvegarde\" & $Date_backup , 1 )
En fait, le message d'erreur signale un problème sur un tableau.
Or dans votre code, vous en utilisez deux :
- $FileList
et
- $DF

D'après votre code $FileList ne devrait pas de présenter de problème.
Par contre $DF = FileGetTime ("c:\sauvegarde\" & $Date_backup , 1 ) peut ne pas renvoyer une date valide et donc la création du tableau peut échouer. Dans ce cas, puisque vous ne vérifiez pas si $DF est bien un tableau, l'erreur : Error: Subscript used with non-Array variable peut effectivement apparaître.

Au lieu de vous baser sur la date de création du répertoire, pourquoi ne pas utiliser son nom ?
Configurez _FileListToArray($rep) pour vous renvoyer uniquement les répertoires, puis traitez le nom de chaque répertoire pour en extraire le jour, le mois et l'année (en vérifiant que les valeurs soient valides).
Faite votre comparaison et voilà. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
vincentr
Niveau 3
Niveau 3
Messages : 35
Enregistré le : jeu. 12 mars 2009 09:02
Status : Hors ligne

Re: [..] Suppression de répertoires en fonction date d

#3

Message par vincentr »

merci pour ta réponse. Je suis un peu leger en programmation.
Peux tu me mettre un peu sur la piste.
Tu voudrais que j'extrais les 2 premiers caractères pour le jour puis du 4 au 5 pour le mois etc.
C'est ca ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Suppression de répertoires en fonction date d

#4

Message par Tlem »

Pour commencer, _FileListToArray($rep, "*", 2) vous renverra un tableau de la liste des dossiers du répertoire $rep et seulement les dossiers.

Ensuite une simple boucle For/Next de lecture de ce tableau vous permettra de lire chaque valeur afin d'y appliquer un traitement.

Pour chacune des valeurs lue, utilisez la commande $aDate = StringSplit($Valeur, "-") afin de décomposer le nom du dossier qui doit être de la forme : 02-12-2009 (D'après ce que vous avez dit)
Si tout se passe bien (il faut vérifier ... hein. :roll: ) vous aurez un nouveau tableau $aDate qui est sensé contenir trois valeurs :
- $aDate[1] = Jour
- $aDate[2] = Mois
- $aDate[3] = Année
Il vous suffit donc de faire votre comparaison de date et de supprimer ou nom le répertoire. :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
vincentr
Niveau 3
Niveau 3
Messages : 35
Enregistré le : jeu. 12 mars 2009 09:02
Status : Hors ligne

Re: [..] Suppression de répertoires en fonction date d

#5

Message par vincentr »

merci,
je vous tiens informé.
vincentr
Niveau 3
Niveau 3
Messages : 35
Enregistré le : jeu. 12 mars 2009 09:02
Status : Hors ligne

Re: [..] Suppression de répertoires en fonction date d

#6

Message par vincentr »

Désolé pour le retard.
Voici mon code et encore merci pour votre aide.

Code : Tout sélectionner

#include <Date.au3>
#include <File.au3>
#include <Array.au3>

;~ -----------------------------------------------------
;~ * Suppression des répertoires de + de 7 jours       *
;~ -----------------------------------------------------

$rep="d:\sauvegarde\"
$FileList=_FileListToArray($rep, "*",2)

If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
EndIf

for $i = 1 to $FileList[0]
    $Date_backup=$FileList[$i]
    $aDate = StringSplit($Date_backup, "-")
    $DateCalc = $aDate[3] & "/" & $aDate[2] & "/" & $aDate[1]
    $DateCalc = _DateDiff ( 'D' , $DateCalc , _NowCalc ( ) )

If $DateCalc > 7 then 
    $supp = $rep &'\' & $FileList[$i]
    DirRemove($supp, 1)
endif

Next
Répondre