Page 1 sur 1

[R] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mar. 22 mai 2018 20:28
par Boulanza
Bonsoir,
Comment peut on supprimer tous les fichier .doc date du jour, avec la condition de ne pas supprimer ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec" dans le code ci-joint.
j'ai pensé à la solution suivante :
Ajouter FileSetAttrib($array[$i]&"/Mes fichiers/, "+AHRS", 0) puisque "_FileListToArrayRec" ne supprime pas les fichiers cachés. Je cherche une meilleure proposition que celle proposée sur le scripte.
Merci d’avance pour votre aide.
Cordialement.
SuppFichiers()
   Func SuppFichiers()
   Local $arrayDrive = DriveGetDrive("All")
   For $y = 1 To $arrayDrive[0] ;boucle sur drive
   $Drive = StringUpper($arrayDrive[$y]) & "\"
      $array = _FileListToArrayRec($Drive, "*.doc", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH) ;le file, récursive, pas de trie, chemin complet

   If IsArray($array) Then
      For $i = 1 To $array[0]
   $info = StringLeft(FileGetTime($array[$i], 1, 1), 8)
   $info_1 = StringLeft(FileGetTime($array[$i], 0, 1), 8)
   If $info = @YEAR & @MON & @MDAY Or $info_1 = @YEAR & @MON & @MDAY Then ;si créé ou modifié

   FileSetAttrib($array[$i], "-AHRS", 0)
   Sleep(2000)
     
      FileSetAttrib($array[$i]&"/Mes fichiers/*.doc", "+AHRS", 0)
       Sleep(2000)

   ;~    ;FileDelete($array[$i])
      FileRecycle ($array[$i])
   EndIf
   Next
   Else
   MsgBox(0,$Drive,"rien de trouvé")
   EndIf
   Next
EndFunc

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mar. 22 mai 2018 21:23
par Tlem
Encore vous !!! :lol:

Indice :
_FileListToArrayRec utilisé avec $FLTAR_FULLPATH (tel que vous le faites dans votre code, liste dans votre tableau le nom et le chemin de chaque fichier .doc trouvé dans $Drive.
Du coup, dans votre boucle For $i = 1 To $array[0] il vous suffit de vérifier le chemin du fichier à traiter. S'il contient "Mes Fichiers" alors => ContinueLoop sinon on fait le traitement.

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mar. 22 mai 2018 22:24
par Boulanza
ContinueLoop c'est nouveau pour moi...

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 00:22
par Tlem
Ben, comme je vous l'ai déjà dit, si vous lisiez plus attentivement la documentation, vous l'auriez vu car la commande ContinueLoop est indiquée dans le types de boucle : et dans l'aide le la commande ExitLoop.

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 10:42
par walkson
Bonjour,
Pour info, vous avez l'aide en français à cette adresse https://www.autoitscript.fr/download/in ... mentation/
Presque à chaque fonction, vous avez un exemple que vous pouvez ouvrir dans Scite en cliquant sur "Ouvrir ce script", ce qui permet de voir la fonction en action et son rôle !
_FileListToArrayRec ne supprime pas les fichiers cachés
_FileListToArrayRec() ne supprime aucun fichier mais fait une recherche

Je n'ai toujours pas compris FileSetAttrib() car après multiples essais, le code supprime les fichiers masqués ou en lecture seul ou avec un mot de passe sous Word ???? et il me semble que je ne suis pas le seul. :roll:

Il existe une autre méthode que celle de Tlem
_FileListToArrayRec($Drive, "*.doc;*.iso||$Recycle.Bin;Mes Fichiers", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
- Recherche des extensions doc et iso
- exclue de la recherche les dossiers $Recycle.Bin (poubelle) et Mes fichiers sur l'ensemble du PC
ex: Mes fichiers sur C: et Mes fichiers sur E: seront ignorés
Rmq: j'ai mis la poubelle car si vous lancez 2 fois le code dans la journée, vous risquez d'envoyer des fichiers à la poubelle alors qu'ils y sont déjà :wink:

Tlem vous reproche, à juste titre, de ne pas lire l'aide. Moi, je vous reprocherais (en plus) de ne pas tester vos codes pour trouver et vérifier des solutions !
La meilleur progression que l'on puisse faire provient le plus souvent de sa propre expérience :mrgreen:

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 13:28
par Boulanza
Bonjour tout le monde,
- J'ai suivie les instruction de Monsieur Tlem, voir code ci-dessous, effectivement tous les fichiers .iso date du jour sont supprimés, sauf les fichier qui se trouvent dans le dossier "Mes fichiers", mais avec la condition que les fichiers ne soient pas cachés.
- Si les fichiers sont cachés le code ne marche pas même lorsque on ajoute " FileSetAttrib($array[$i], "-AHRS", 0)".
- Je confirme à Monsieur walkson que le code ne supprime les fichiers masqués ou en lecture seul. Sauf erreur dans le code.
_FileListToArrayRec($Drive, "*.doc;*.iso||$Recycle.Bin;Mes Fichiers", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
ne marche pas.
N.B: Le test est fait avec fichier .iso
Cordialement.
SuppFichiers()
        Func SuppFichiers()
        Local $arrayDrive = DriveGetDrive("All")
        For $y = 1 To $arrayDrive[0] ;boucle sur drive
        $Drive = StringUpper($arrayDrive[$y]) & "\"
                $array = _FileListToArrayRec($Drive, "*.iso", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH) ;le file, récursive, pas de trie, chemin complet

       If IsArray($array) Then
      ;   _ArrayDisplay($array)
         For $i = 1 To $array[0] ;boucle sur fichier Doc

            $info = StringLeft(FileGetTime($array[$i], 1, 1), 8)
            $info_1 = StringLeft(FileGetTime($array[$i], 0, 1), 8)
            $info_2 = StringLeft(FileGetTime($array[$i]&"\Mes Fichiers\*.iso", 0, 1), 8)
           
                                If $info = @YEAR & @MON & @MDAY Or $info_2 = @YEAR & @MON & @MDAY Then ContinueLoop
            If $info = @YEAR & @MON & @MDAY Or $info_1 = @YEAR & @MON & @MDAY Then ;si créé ou modifié

       ; FileSetAttrib($array[$i], "-AHRS", 0)
        Sleep(2000)
     
      FileSetAttrib($array[$i]&"/Mes fichiers/*.iso", "+AHRS", 0)
       Sleep(2000)

        ;~      ;FileDelete($array[$i])
                FileRecycle ($array[$i])
        EndIf
        Next
        Else
        MsgBox(0,$Drive,"rien de trouvé")
        EndIf
        Next
EndFunc

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 14:21
par walkson
Voilà ma corbeille après exécution du script sur doc et iso sous Win 7 sur mon PC. G:\ étant un disque dur externe
Que dire de plus à part la question "quel sont vos droits administrateur " si cela peut empêcher la suppression de fichiers ?...

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 14:28
par Boulanza
Merci pour votre réponse,
Je suis sur Win 10 64 bits
Peut être c'est un problème de script. Pouvez-vous nous communiquer votre script test, merci.
Cordialement.

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 15:01
par walkson
Sincèrement on tourne en rond :shock:
#include <File.au3>
#include <Array.au3>
SuppFichiers()
        Func SuppFichiers()
        Local $arrayDrive = DriveGetDrive("All")
        For $y = 1 To $arrayDrive[0] ;boucle sur drive
        $Drive = StringUpper($arrayDrive[$y]) & "\"
                $array = _FileListToArrayRec($Drive, "*.doc;*.iso||$Recycle.Bin;Mes Fichiers", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH) ;le file, récursive, pas de trie, chemin complet

        If IsArray($array) Then
         _ArrayDisplay($array)
                For $i = 1 To $array[0]
        $info = StringLeft(FileGetTime($array[$i], 1, 1), 8)
        $info_1 = StringLeft(FileGetTime($array[$i], 0, 1), 8)    
        If $info = @YEAR & @MON & @MDAY Or $info_1 = @YEAR & @MON & @MDAY Then ;si créé ou modifié
         MsgBox(0,"",$array[$i])


        ;~      ;FileDelete($array[$i])
                FileRecycle ($array[$i])
        EndIf
        Next
        Else
        MsgBox(0,$Drive,"rien de trouvé")
        EndIf
        Next
EndFunc
 
Le code est toujours le même à part le masque
Par contre, je doute fortement sur votre code !
Mettez en dessous de $info_2 = StringLeft(FileGetTime($array[$i]&"\Mes Fichiers\*.iso", 0, 1), 8) ceci:
ConsoleWrite($info &">>"& $info_1 &">>info2 >>"& $info_2 & @CR)
Valeur de $info_2 ????
Je confirme, vous ne testez pas assez vos codes !!!

Pour savoir si "Mes Fichiers" est dans le chemin ($array[$i]), on peut utiliser StringInStr() (si > 0 il y est => voir l'aide)

Re: [..] Comment supprimer tous les fichier .doc saut ceux du dossier nommé "Mes fichiers" avec "_FileListToArrayRec"

Posté : mer. 23 mai 2018 17:02
par Boulanza
Bonjour Monsieur walkson,
Merci infiniment pour votre aide ainsi que votre compréhension.Votre dernier code marche parfaitement pour supprimer les fichiers cachés, en plus il ne supprime pas les fichiers se trouvant dans le dossier "Mes fichiers" .$array = _FileListToArrayRec($Drive, "*.iso;||$Recycle.Bin;Mes Fichiers", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH) ;le file, récursive, pas de trie, chemin complet
Cordialement.