Page 1 sur 1

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

Posté : jeu. 03 déc. 2009 08:49
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.

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

Posté : jeu. 03 déc. 2009 19:08
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à. ;)

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

Posté : ven. 04 déc. 2009 11:35
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 ?

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

Posté : ven. 04 déc. 2009 21:55
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:

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

Posté : lun. 07 déc. 2009 17:18
par vincentr
merci,
je vous tiens informé.

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

Posté : mer. 23 déc. 2009 14:44
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