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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
markham
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 17 nov. 2009 18:12
Status : Hors ligne

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

#1

Message 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 !!!
Modifié en dernier par markham le ven. 20 nov. 2009 14:07, modifié 2 fois.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

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

#2

Message 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 .
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#3

Message 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).
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é".
markham
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 17 nov. 2009 18:12
Status : Hors ligne

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

#4

Message 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.
markham
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 17 nov. 2009 18:12
Status : Hors ligne

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

#5

Message 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 !
Répondre