[R] Effacement des dossiers si vides

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

[R] Effacement des dossiers si vides

#1

Message par Gnifrus »

Bonjour,

Je recherche une méthode ou une piste pour faire la chose suivante :
Je dispose d'un dossier, qui a une arborescence de dossiers et fichiers que je ne connais pas à l'avance, sur n profondeur.
Je souhaiterai effacer les dossiers vides, ou les dossiers qui contiennent des dossiers vides....etc...

En gros, ne conserver que arborescence des dossiers qui contiennent des fichiers, ou dit différemment, seuls les fichiers m’intéressent dans cette arborescence, donc je veux virer tous les autres dossiers inutiles...

Je pensais qu'il fallait faire d'abord un tableau de cette arborescence, pour commencer à traiter les dossiers les plus "éloignés" du dossier de base, et ainsi de suite....

Vous en pensez quoi ? Que me donneriez vous comme solution, piste ou autre ?

Merci d'avance pour votre aide, car je suis un petit peu bloqué !
Bonne journée,

Gnifrus.
Modifié en dernier par Gnifrus le jeu. 28 mars 2013 11:51, modifié 4 fois.
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 870
Enregistré le : ven. 30 mai 2008 15:08
Status : Hors ligne

Re: [..] Effacement des dossiers si vides

#2

Message par DimVar »

Bonjour,


Je pense qu'une recherche avec "_FileListToArray recursive" sur le forum anglais t'aidera.

Cdlt.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Effacement des dossiers si vides

#3

Message par SurPriseS »

Code : Tout sélectionner

#include<Array.au3>
#include<FileListToArrayNT.au3>

$start = 0

while $start = 0

    $ar_Array = _FileListToArrayNT ("Z:\backup Cobian", "*.*", 2, 2, True, "Temp")

        For $i = 1 to $ar_Array[0]
        sleep(10)
          $start = 1

          $size = DirGetSize($ar_Array[$i], 1)

          if $size[0] = 0 and $size[1] = 0 and $size[2] = 0 Then
               DirRemove($ar_Array[$i])
               $start = 0
          EndIf

        Next

WEnd
 
Bon, c'est un truc que j'avais fait à l'arrache un jour, je pense que c'est très très moche, mais bon, ça marche !

L'include : http://www.autoitscript.fr/forum/viewto ... 893#p34893
Modifié en dernier par SurPriseS le ven. 17 févr. 2012 21:54, modifié 2 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Effacement des dossiers si vides

#4

Message par Tlem »

@DimVar
Pourquoi renvoyer vers le forum Anglais, alors qu'il y a tout ce qu'il faut ici :
http://www.autoitscript.fr/forum/viewto ... f=21&t=479

@SurPriseS
Il n'est pas raisonable de présenter un code qui fait appel à une fonction non standard d'AutoIt sans en indiqué la source ou le code ...
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é".
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

Re: [..] Effacement des dossiers si vides

#5

Message par Gnifrus »

Merci à tous pour votre aide !
Je ne connaissais pas ces fonctions...
Je vais essayer d'exploiter cette piste dès lundi, au boulot.
Dans l'attente, je laisse mon topic ouvert et vous tiendrai au courant !

Un grand grand merci encore !

Gnifrus.
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Effacement des dossiers si vides

#6

Message par SurPriseS »

Tlem a écrit : @SurPriseS
Il n'est pas raisonable de présenter un code qui fait appel à une fonction non standard d'AutoIt sans en indiqué la source ou le code ...
J'étais au taff, je savais bien que je zappais un morceau ;)
J'ai édité ;)
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

Re: [..] Effacement des dossiers si vides

#7

Message par Gnifrus »

Bonjour,

Merci beaucoup !
J'ai essayé et ça marche impec !

Vous m'avez encore sauvé d'un mauvais pas !!!

@bientôt, (je n'en doute pas... :lol: )

Gnifrus.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

Re: Effacement des dossiers si vides

#8

Message par Gnifrus »

Bonjour,

Je me permets de relancer mon sujet sur l'effacement des dossiers vides, car lorsque j'ai voulu réessayer le code de SurPriseS, je me suis aperçu qu'il générait une erreur "Subscript used with non-Array variable" dans certaines situations, notamment lorsque le dossier dans lequel rechercher les dossiers vides, ne comportait aucun dossier ou que des dossiers vides.

J'ai cherché toute la journée, mais là, je jette l'éponge !!!

Y aurait-il une âme charitable pour me venir en aide ?

Merci par avance,
Bonne soirée,

Gnifrus
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: Effacement des dossiers si vides

#9

Message par parazitenew »

Cette erreur signifie que l'Array est vide, pour éviter cette erreur ajoute ceci après que l'Array soit crée:

Code : Tout sélectionner

If Not @Error Then
    Execute moi le reste du script
Else
    Tu sors
EndIf
Si il n'y a pas d'erreur, dans ce cas, le script continue, sinon il passe son chemain.
Gnifrus
Niveau 4
Niveau 4
Messages : 81
Enregistré le : mar. 14 juil. 2009 13:48
Localisation : Montauban
Status : Hors ligne

Re: Effacement des dossiers si vides

#10

Message par Gnifrus »

Bonjour,

Merci parazitenew !

Ta solution fonctionne parfaitement !
J'avais bien essayé avec un "If Not @Error Then..." mais comme un c.., j'avais mis un "Return" pour sortir de la boucle au lieu d'un "ExitLoop" ! :oops:
Quel boulet !

Merci encore,
Bonne continuation et... à bientôt,

Gnifrus.
Répondre