[R] Suppression dossiers et fichiers dans une boucle

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

[R] Suppression dossiers et fichiers dans une boucle

#1

Message par guillaume »

Bonjour à tous,

Je cherche à développer un script pour nettoyer les profils itinérant de mes utilisateurs (suppressions de fichiers et dossiers )

Jusque là pas de problèmes pour supprimer les fichiers, j'utilise une boucle pour lister les dossiers des utilisateurs.

mais comme je veux aussi supprimer des sous-dossiers je ne peux pas le faire avec un FileDelete du coup je dois faire une 2ième boucle dans ma boucle pour faire un DirRemove

Je ne sais pas si on peut faire ça, mais avec mon script j'ai un "non-Array variable"


Bon j'imagine que j'ai du faire un peu n'importe quoi, je ne suis pas le roi de la mise en forme...

Si vous pouvez m'aider à faire ça de manière propre ça serait top !

merci

► Afficher le texte
Modifié en dernier par guillaume le ven. 20 déc. 2013 11:47, modifié 3 fois.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#2

Message par bloodwolff »

Je n'ai pas fais d'autoit depuis un petit moment mais c'est totalement faisable. Voici l’algorithme que je te propose.
FonctionSuppressionDossier($Chemin)
Tu liste les dossiers
Pour chaque dossier tu appelle la fonction FonctionSupressionDossier(Chemin + \ + nom du dossier)
Tu listes les fichiers
Tu supprimes les fichiers
Tu supprime le dossier parent
EndFunc
Voilà en espérant avoir pu t'aider, si sa ne suffis pas je peux rouvir mes fichiers d'aide autoit :P
Compte skype : bloodwolfff
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#3

Message par guillaume »

oui c'est à peu près ce que j'ai essayé de faire, mais j'ai du faire une connerie car quand j'appelle la fonction, j'ai un problème de variable.
(je ne suis pas du tout développeur alors pas facile de tout assimiler ;) )
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#4

Message par bloodwolff »

Code : Tout sélectionner

#include <File.au3>



SupprimerDossier("E:\ProfilsTSE\")




Func SupprimerDossier($Chemin)
    $Dirs = _FileListToArray($Chemin, "*", 2)
    If Not @error Then
        For $i = 1 To $Dirs[0]
            SupprimerDossier($Chemin & "\" & $Dirs[$i])
        Next
    EndIf
    $Files = _FileListToArray($Chemin, "*", 1)
    if Not @error Then
        For $i = 1 To $Files[0]
            FileDelete($Chemin & "\" & $Files[$i])
        Next
    EndIf
    DirRemove($Chemin)
EndFunc
Compte skype : bloodwolfff
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#5

Message par guillaume »

ah oui mais là par contre ça me supprime le dossier complètement.

je veux supprimer juste le contenu (fichiers + sous dossiers ), mais il faut que le dossier que je veux vider reste, c'est pour ça que j'essaie d'utiliser une boucle
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#6

Message par bloodwolff »

Code : Tout sélectionner

Func SupprimerDossier($Chemin)
    $Dirs = _FileListToArray($Chemin, "*", 2)
    If Not @error Then
        For $i = 1 To $Dirs[0]
            SupprimerDossier($Chemin & "\" & $Dirs[$i])
            [color=#FF0000]DirRemove($Chemin & "\" & $Dirs[$i])[/color]
        Next
    EndIf
    $Files = _FileListToArray($Chemin, "*", 1)
    if Not @error Then
        For $i = 1 To $Files[0]
            FileDelete($Chemin & "\" & $Files[$i])
        Next
    EndIf
    [strike]DirRemove($Chemin)[/strike]
EndFunc
Ce n'était pourtant pas très difficile :?
Compte skype : bloodwolfff
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#7

Message par guillaume »

j'étais en train de chercher en même temps, mais pas assez rapide.

Pas bien réveillé c'est dur le lundi !


merci :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#8

Message par mikell »

C'est pas redondant la récursivité ?

Code : Tout sélectionner

Func SupprimerContenu($Chemin)
    Local $file, $Files = _FileListToArray($Chemin, "*", 0)
    If Not @error Then
       For $i = 1 To $Files[0]
          $file = $Chemin & "\" & $Files[$i]
          If StringInStr(FileGetAttrib($file), "D") Then
              DirRemove($file, 1)
          Else
              FileDelete($file)
          EndIf
       Next
   EndIf
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#9

Message par bloodwolff »

Code : Tout sélectionner

$dirName = "E:\ProfilsTSE\"
DirRemove($dirName, 1)
DirCreate($dirName)
C'est pas redondant créer des fonctions personnels et utiliser des boucles ? Nan je rigole mais j'ai fais sa assez rapidement sans même regarder les param :arrow:

Reste que je ne vois pas où est le problème de la récursivité, j'aurais besoin que tu m'éclaires
Compte skype : bloodwolfff
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#10

Message par mikell »

Pas un problème, juste inutile
Ta solution à 3 lignes étant bien évidemment la meilleure :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#11

Message par bloodwolff »

Ta solution à 3 lignes étant bien évidemment la meilleure
J'ai lancer les 3 fonctions sur un dossier identique avec un petit timer et voici le podium
► Afficher le texte163ms
► Afficher le texte271ms
► Afficher le texte279ms
Donc à voir les résultats la récursivité s'en tire plutôt pas mal :D ! Sans rancune
Compte skype : bloodwolfff
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#12

Message par mikell »

Tout à fait surprenant qu'exécuter une ribambelle de _FileListToArray successivement fasse le meilleur temps :mrgreen:
bloodwolff a écrit :Sans rancune
Pourquoi diable ?
En mode compète [ON] j'aurais utilisé le timer AVANT de poster :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [R] Suppression dossiers et fichiers dans une boucle

#13

Message par guillaume »

c'est nickel, merci beaucoup j'ai pu mettre le code dans mon script pour faire ce que je voulais.
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [R] Suppression dossiers et fichiers dans une boucle

#14

Message par guillaume »

juste si je peux me permettre, question bête sans doute pour vous.

Mais si je veux faire des exclusions sur les suppressions j'utilise quoi ?

En gros je voudrais comparer la valeur de la variable $Dirs[$i] avec le nom d'un dossier que je listerais dans une autre variable.

si dans la boucle de ma fonction $Dirs[$i]= $nom_dossier (ex "administrateur" )

alors je n'applique pas la suppression, sinon je supprime

J'ai pensé à StringCompare en faisant quelques recherches mais je ne sais pas si c'est très adapté !

merci !
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [R] Suppression dossiers et fichiers dans une boucle

#15

Message par guillaume »

j'ai fait comme ça,

peut être pas très propre mais ça fonctionne :

Code : Tout sélectionner

Local $result = StringCompare($Dirs[$i], $user1)

    If $result < 0 Then
        SupprimerDossier($Chemin &"\"& $Dirs[$i])
        DirRemove($Chemin & "\" & $Dirs[$i])

ElseIf $result > 0 Then
        SupprimerDossier($Chemin &"\"& $Dirs[$i])
        DirRemove($Chemin & "\" & $Dirs[$i])
Else
EndIf
Modifié en dernier par guillaume le jeu. 19 déc. 2013 15:14, modifié 1 fois.
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [R] Suppression dossiers et fichiers dans une boucle

#16

Message par guillaume »

euh oui non mais plus simple même :

Code : Tout sélectionner

            Local $result = StringCompare($Dirs[$i], $user1)
            If $result = 0 Then

            Else
                SupprimerDossier($Chemin &"\"& $Dirs[$i])
                DirRemove($Chemin & "\" & $Dirs[$i])
            EndIf
j'apprends, j'apprends... :wink:
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [R] Suppression dossiers et fichiers dans une boucle

#17

Message par guillaume »

Finalement je bloque complètement quand il s'agit de gérer plusieurs exclusions...

Je crois que je vais relancer le topic,

voici donc la fonction :

Code : Tout sélectionner

$user1 = "user1"
$user2 = "user2"
$user3 = "user3"


SupprimerDossier ("E:\utilisateur\")


Func SupprimerDossier($Chemin)
    
    $Dirs = _FileListToArray($Chemin, "*", 2)
    If Not @error Then
        
        For $i = 1 To $Dirs[0]

            Local $result = StringCompare($Dirs[$i], $user1)
            If $result = 0 Then
              Else
                SupprimerDossier($Chemin &"\"& $Dirs[$i])
                DirRemove($Chemin & "\" & $Dirs[$i])
            EndIf

        Next

    EndIf
    
    $Files = _FileListToArray($Chemin, "*", 1)
    if Not @error Then
       For $i = 1 To $Files[0]

            FileDelete($Chemin & "\"&  $Files[$i])
        Next
    EndIf

EndFunc
Si je n'ai qu'un utilisateur alors pas de soucis, mon dossier n'est pas supprimé

Mais quand j'en ai plusieurs, je n'arrive pas à trouver comment faire la comparaison sur les dossiers.


merci si vous pouvez m'aider
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#18

Message par bloodwolff »

Je le laisserais à l'Extérieur de la fonction, sinon tout les dossiers qui ont un nom identique à un nom d'utilisateur ne seront pas effacer même si ils sont situé plus profondément comme sur le bureau par exemple ("E:\utilisateur\user1\bureau\user2")
► Afficher le texte
Modifié en dernier par bloodwolff le jeu. 19 déc. 2013 17:11, modifié 1 fois.
Compte skype : bloodwolfff
guillaume
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mar. 28 août 2007 12:13
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#19

Message par guillaume »

merci, mais par contre j'ai :

$users[3] = ["user1", "user2", "user3"]
$users^ERROR

Error: Expected a "=" operator in assignment statement
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Suppression dossiers et fichiers dans une boucle

#20

Message par bloodwolff »

ah oui pour déclarer un tableau on doit impérativement mettre dim devant
Le code du message précédent à été corrigé
Compte skype : bloodwolfff
Répondre