Page 1 sur 1

[R] Effacer tous les fichiers d'un dossier sauf 3 dossiers

Posté : mar. 17 nov. 2009 18:22
par markham
Bonsoir a tous,
je vous sollicite, parce que ça fait un petit moment que je n'ai pas utiliser autoit, et du coup je suis perdu...

voila mon problème :

j'aimerais faire un script qui efface tout les fichier/et sous dossier d'un dossier sauf 3.

dans mon cas
le script doit effacer tout le contenu du dossier c:\EBP
exepté :
- le sous dossier commun et tout son contenu
- le sous dossier demo et tout son contenu
- le sous dossier demo.agr1 et tout son contenu

voili voilou

merci d'avance !!!

Re: [..]effacer tous les fichier d'un dossier sauf 3 dossier

Posté : mar. 17 nov. 2009 19:07
par sylvanie
Comme ça à vue de nez, je copierai les 3 rep dans un temporaire, j'efface tout et je restaure la coipe, c'est peu élégant mais c'est moins prise de tête que de tout lister puis effacer en fonction du nom .

Re: [..] Effacer tous les fichiers d'un dossier sauf 3 dossiers

Posté : mar. 17 nov. 2009 23:14
par Tlem
Il y a ici des fonctions permettant le listing de fichiers/dossiers d'un répertoire et de ses sous répertoires.
Il est possible d'utiliser l'exclusion de répertoires ou fichiers et dans ce cas de supprimer tout sauf ce qui n'est pas listé.
Je ne suis pas sure que les deux premières fonction gère cela correctement, mais la dernière oui (par contre il faut travailler avec la dernière Bêta de AutoIt).

Re: [..] Effacer tous les fichiers d'un dossier sauf 3 dossiers

Posté : jeu. 19 nov. 2009 18:12
par markham
re: Merci pour vos reponse...
j'ai pris la version simple de copier les dossier puis de les remettre apres,

par contre je n'arrive pas a trouver la commande qui efface tout le contenu d'un dossier. je patauge avec fileremove et dirremove...., et je voudrais évite de recourir a des commandes dos...

Merci d'avance.

Re: [..] Effacer tous les fichiers d'un dossier sauf 3 dossiers

Posté : ven. 20 nov. 2009 14:06
par markham
c bon j'ai fini
j'ai piqué des fonctions et des idée un peu partout au hasard sur le forum
alors je remercie tout ceux qui m'ont aidé intentionnellment ou non :wink:

si vous avez des suggestion pour l'optimiser n'hesitez pas !

voila ce que ça donne :

Code : Tout sélectionner

Opt("MustDeclareVars", 1)
#Include <File.au3>
#Include <Array.au3>

; déclaration des variables

    LOCAL $avListe_fichiers
    LOCAL $iCtr
    LOCAL $sAttributs

;création d'un répertoire temporaire
DirCreate("c:\tmpebp")

;mise en sureté des dossier a garder
DirMove("C:\ebp\common","c:\tmpebp\common",1)
DirMove("C:\ebp\demo","c:\tmpebp\demo",1)
DirMove("C:\ebp\demo.agr1","c:\tmpebp\demo.agr1",1)

Sleep(3000)
 ; on affiche le message pour faire patienter l'utilisateur
    SplashTextOn("", "...Nettoyage d'EBP en COUR....", 400, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)

    ; on met une pause pour que l'utilisateur puisse lire le message
    Sleep(1000)

    ; on récupère la liste des fichiers et dossiers dans un tableau
    $avListe_fichiers = _FileListToArray("C:\EBP")

    ; si le dossier contient des fichiers, on continue
    If @error = 0 Then

        ; on va traiter les éléments du tableau un par un
        For $iCtr = 1 To $avListe_fichiers[0]

            ; on récupère l'attribut de l'élément pour savoir si c'est un fichier ou un dossier
            $sAttributs = FileGetAttrib("C:\EBP" & '\' & $avListe_fichiers[$iCtr])

            ; si on a réussi à lire l'attribut, on continue
            If @error = 0 Then

                ; si l'attribut correspond à un dossier
                If StringInStr($sAttributs, "D") Then
                    ; on supprime le dossier
                    DirRemove("C:\EBP" & '\' & $avListe_fichiers[$iCtr], 1)
                ; sinon l'attribut correspond à un fichier
                Else
                    ; on supprime le fichier
                    FileDelete("C:\EBP" & '\' & $avListe_fichiers[$iCtr])
                EndIf

            EndIf

        Next

    EndIf
;on remet les dossier en place
DirMove("c:\tmpebp\common","C:\ebp\common",1)
DirMove("c:\tmpebp\demo","C:\ebp\demo",1)
DirMove("c:\tmpebp\demo.agr1","C:\ebp\demo.agr1",1)
; et on efface le dossier temporaire
DirRemove("c:\tmpebp",1)

    ; on efface le message
    SplashOff()
voili voilou !