Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 16 sur 16
  1. #1
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut Supprimer des fichiers dans un répertoire

    Bonjour,

    J'ai une question.

    J'ai un répertoire dans lequel se trouvent des fichiers txt nommés de la façon
    suivante :

    ABXXXXXX _ MM-YYYY _ ZZ.txt

    AB sont des caractères qui ne changent jamais.

    XXXXXX sont des caractères variables

    MM-YYYY sont Mois et Années

    ZZ varie en fonction de XXXXXX

    Ainsi je peux avoir un répertoire contenant :

    AB111111 _ MM-YYYY _ 01.txt
    AB111111 _ MM-YYYY _ 02.txt
    AB111111 _ MM-YYYY _ 03.txt
    ABSDFGHJ _ MM-YYYY _ 01.txt
    ABSDFGHJ _ MM-YYYY _ 02.txt
    AB345678 _ MM-YYYY _ 01.txt

    Ce que je souhaite c'est que le batch supprime les fichiers :

    AB111111 _ MM-YYYY _ 01.txt
    AB111111 _ MM-YYYY _ 02.txt
    ABSDFGHJ _ MM-YYYY _ 01.txt

    Mais conserve :

    AB111111 _ MM-YYYY _ 03.txt
    ABSDFGHJ _ MM-YYYY _ 02.txt
    AB345678 _ MM-YYYY _ 01.txt

    Donc la valeur de ZZ la plus élevée pour chaque fichier et ce quelque soit le nombre de fichiers dans le répertoire.

    Je me doute que la solution est dans une boucle for mais je n'arrive pas à enchaîner plusieurs commandes derrière le do.

    Merci de votre aide et de votre mansuétude vu mon niveau ...

    @ bientôt.

  2. #2
    Membre émérite Avatar de maxim_um
    Inscrit en
    mai 2007
    Messages
    895
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 895
    Points : 816
    Points
    816

    Par défaut

    salut Fabdeuche et bienvenue sur le forum.

    Je remarque que c'est la troisième discussion que tu ouvres sur le même sujet, avec la même demande.

    -> La première

    -> La deuxième

    Cette manière de faire n'est pas bonne, elle pollue le forum et disperse les réponses.

    Tu dois en choisir une, et marquer les deux autres en délestage pour qu'elles soient supprimées. N'oublie pas de préciser le motif.

    Une fois que ce sera fait, on te donnera un petit coup de pouce, à condition bien sûr, que tu y mettes du tien.

    Bonne continuation.

  3. #3
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut

    Bonjour,

    Désolé de mettre autant dispersé.

    Mon but n'est pas effectivement de polluer le Forum.

    J'ai donc mis "en délestage" mes deux précédents posts.

    Par avance merci et mille excuse.

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro Walid Toumi
    Inscrit en
    juillet 2008
    Messages
    956
    Détails du profil
    Informations personnelles :
    Nom : Homme Walid Toumi
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 956
    Points : 1 587
    Points
    1 587

    Par défaut

    salut,

    pas bien tester

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    setlocal enabledelayedexpansion
    
    for /f "tokens=1-3delims=_" %%a in ('dir/a-d/b "AB*_*_*"') do (
      set a=%%a
      if "!a!" neq "!b!" (echo/%%a_%%b_%%c) >> #exclude#
      set b=!a!
    )
    for /f "delims=" %%a in ('dir/a-d/b "AB*_*_*"^|findstr /vig:#exclude#') do (
      echo del "%%a"
    )
    del #exclude#
    pause
    EDIT: le script est fait suivant tes exemples de noms de fichiers qui comportent des espaces entre chaque token.

  5. #5
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro Walid Toumi
    Inscrit en
    juillet 2008
    Messages
    956
    Détails du profil
    Informations personnelles :
    Nom : Homme Walid Toumi
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 956
    Points : 1 587
    Points
    1 587

    Par défaut

    OoPS !! j'ai pas vu le post de maxim_um et les liens qu'il a donné..c'est vrai qu'il y a redondance de posts de Fabdeuche


  6. #6
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par I'm_HERE Voir le message
    salut,

    pas bien tester

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    setlocal enabledelayedexpansion
    
    for /f "tokens=1-3delims=_" %%a in ('dir/a-d/b "AB*_*_*"') do (
      set a=%%a
      if "!a!" neq "!b!" (echo/%%a_%%b_%%c) >> #exclude#
      set b=!a!
    )
    for /f "delims=" %%a in ('dir/a-d/b "AB*_*_*"^|findstr /vig:#exclude#') do (
      echo del "%%a"
    )
    del #exclude#
    pause
    EDIT: le script est fait suivant tes exemples de noms de fichiers qui comportent des espaces entre chaque token.
    Salut,

    Merci beaucoup....

    Je vais étudier cela....

    Pour la commande dir /a-d/b je pense qu'il s'agit de dir /a/d/b

    En tout cas je regarde de plus près ce batch et je reviens vers vous si il répond à mon besoin....

    Merci beaucoup....

    @+

  7. #7
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    mai 2004
    Messages
    842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : mai 2004
    Messages : 842
    Points : 1 475
    Points
    1 475

    Par défaut

    Non pour le dir c'est bien dir /a-d, ce n'est pas la même chose que /a/d.

    Dir /a-d permet de n'avoir que les fichiers et pas les repertoires.


    Juste en passant que tu ne perdes pas du temps la dessus
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  8. #8
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut

    Salut,

    Oui j'avais corrigé de moi même pour la syntaxe du dir !!!

    Sinon pour en revenir au batch proposé.

    Il y a plusieurs réglages que je n'arrive pas à faire :

    Déjà la suppression des fichiers ne fonctionne pas. En effet si j'ai 5 fichiers dans mon répertoire et que 3 sont ajoutés au fichier exclude et bien à la fin du traitement j'ai toujours 5 fichiers.

    De plus je ne sais pas gérer le cas où je n'ai qu'un fichier (par exemple : AB345678 _ MM-YYYY _ 01.txt et pas de fichier AB345678 _ MM-YYYY _ 02.txt) dans ce cas il m'alimente le fichier exclude avec AB345678 _ MM-YYYY _ 01.txt et donc me le supprimerait si la suppression marchait.

    Je cherche mais je n'avance pas réellement....

    Merci pour votre aide et compréhension.

  9. #9
    Membre émérite Avatar de maxim_um
    Inscrit en
    mai 2007
    Messages
    895
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 895
    Points : 816
    Points
    816

    Par défaut

    Salut,

    Je te propose une autre approche supplémentaire, différente de celle de I'm_HERE.
    En quelques mots, voici comment elle est organisée:

    1- tu listes le contenu du dossier, par ordre alphabétique, dans un fichier texte.
    2- tu fais une analyse séquentielle du contenu du fichier texte à l'aide d'une pile de deux variables qui feront office de séquenceur, et qui permettront ainsi de faire le tri.

    Pour le point un, c'est à ta portée
    Pour le point deux, on s'en occupera.

    Donc, il ne te reste qu'à faire le point un (avec la commande «dir») et le point deux te sera servi sur un plateau d'argent.

  10. #10
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par maxim_um Voir le message
    Salut,

    Je te propose une autre approche supplémentaire, différente de celle de I'm_HERE.
    En quelques mots, voici comment elle est organisée:

    1- tu listes le contenu du dossier, par ordre alphabétique, dans un fichier texte.
    2- tu fais une analyse séquentielle du contenu du fichier texte à l'aide d'une pile de deux variables qui feront office de séquenceur, et qui permettront ainsi de faire le tri.

    Pour le point un, c'est à ta portée
    Pour le point deux, on s'en occupera.

    Donc, il ne te reste qu'à faire le point un (avec la commande «dir») et le point deux te sera servi sur un plateau d'argent.
    Bonjour,

    Merci de la proposition....

    Donc pour le point 1 je dirais :

    Code :
    dir/a-d/b "AB*_*_*" echo >> maliste
    Pour le point deux et bien merci d'avance.....

    J'aime la démarche de votre forum qui fait que la solution n'est pas donnée de façon abrupte.... En effet il vaut mieux être amené à réfléchir par soi même mais ce n'est pas toujours évident quand on débute....

    Mais c'est formateur...

    Merci à vous tous.

  11. #11
    Membre émérite Avatar de maxim_um
    Inscrit en
    mai 2007
    Messages
    895
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 895
    Points : 816
    Points
    816

    Par défaut

    Citation Envoyé par Fabdeuche Voir le message
    Pour le point deux et bien merci d'avance.....

    J'aime la démarche de votre forum qui fait que la solution n'est pas donnée de façon abrupte.... En effet il vaut mieux être amené à réfléchir par soi même mais ce n'est pas toujours évident quand on débute....
    Disons surtout que ça fait un petit bout de temps que tu penches sur la question. Certes, pendant un long moment tu étais absent, mais le fait que tu reviennes et que tu remettes ton souci sur la table montre ta motivation. Ça mérite bien un coup de pouce (dès que je finis mon travail actuel).

  12. #12
    Membre émérite Avatar de maxim_um
    Inscrit en
    mai 2007
    Messages
    895
    Détails du profil
    Informations forums :
    Inscription : mai 2007
    Messages : 895
    Points : 816
    Points
    816

    Par défaut

    Bon, voilà une version répondant à ta demande.
    J'ai essayé de la structurer d'une manière assez simple pour que tu puisses la faire évoluer en fonction de tes besoins.
    Les autres, avec quelques modifications minimes, pourront l'utiliser à d'autres fins.

    Voilà le script utilisé pour générer les fichiers de tests:

    setFiles.cmd:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cd.>"ab112211 _ mm-yyyy _ 01.txt"
    cd.>"ab111111 _ mm-yyyy _ 02.txt"
    cd.>"ab111111 _ mm-yyyy _ 05.txt"
    cd.>"ab111111 _ mm-yyyy _ 03.txt"
    cd.>"ab111111 _ mm-yyyy _ 01.txt"
    cd.>"ab345678 _ mm-yyyy _ 01.txt"
    cd.>"absdfghj _ mm-yyyy _ 01.txt"
    cd.>"absdfghj _ mm-yyyy _ 02.txt"
    cd.>"ab111111 _ mm-yyyy _ 10.txt"
    et voilà le script moteur:

    delPFiles.cmd:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ::sample script by maxim_um for http://www.developpez.net/forums/d822555/general-developpement/programmation-windows/scripts-batch/supprimer-fichiers-repertoire/
    @echo off
    cd.>list.txt
    echo ::@echo off>delfiles.cmd
    set varini=notactivated& set varnew=notactivated
    dir /a-d /l /b /on AB*.txt>>list.txt
    for /f "tokens=*" %%i in (list.txt) do call :analyse "%%~nxi"
    goto fin
    
    :analyse
    set varnew=%~1
    if /i "%varini:~0,-7%"=="%varnew:~0,-7%" call :okfordel
    set varini=%varnew%
    goto :eof
    
    :okfordel
    echo %varini% : OK pour suppression
    echo del /f "%varini%">>delfiles.cmd
    goto :eof
    
    :fin
    
    rem call delfiles.cmd
    Donc, je disais, en ce qui te concerne, les éléments à supprimer seront listés dans le fichier "delfiles.cmd". Lorsque tu auras estimé que le script est suffisamment fiable (puisqu'il s'agit là d'une version de niveau 1, certes qui fonctionne, mais qui ne prend pas encore en charge les contextes particuliers auxquels tu pourrais être confronté), à ce moment-là, tu pourras rendre effectives les suppressions en supprimant le «rem» avant le «call delfiles.cmd».

    Une des évolutions possibles, serait de pouvoir utiliser la fonction "Envoyers vers…" afin que tu puisses transmettre aisément tout un dossier au script. Ce qui en améliorerait grandement l'usage.

    Voilà, j'espère que ça te fait plaisir.

    Enjoy;

  13. #13
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro Walid Toumi
    Inscrit en
    juillet 2008
    Messages
    956
    Détails du profil
    Informations personnelles :
    Nom : Homme Walid Toumi
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 956
    Points : 1 587
    Points
    1 587

    Par défaut

    Citation Envoyé par Fabdeuche Voir le message
    Salut,

    Oui j'avais corrigé de moi même pour la syntaxe du dir !!!

    Sinon pour en revenir au batch proposé.

    Il y a plusieurs réglages que je n'arrive pas à faire :

    Déjà la suppression des fichiers ne fonctionne pas. En effet si j'ai 5 fichiers dans mon répertoire et que 3 sont ajoutés au fichier exclude et bien à la fin du traitement j'ai toujours 5 fichiers.

    De plus je ne sais pas gérer le cas où je n'ai qu'un fichier (par exemple : AB345678 _ MM-YYYY _ 01.txt et pas de fichier AB345678 _ MM-YYYY _ 02.txt) dans ce cas il m'alimente le fichier exclude avec AB345678 _ MM-YYYY _ 01.txt et donc me le supprimerait si la suppression marchait.

    Je cherche mais je n'avance pas réellement....

    Merci pour votre aide et compréhension.
    salut,

    essayes d'ajouter dans les 2 boucles FOR le commutateur /o-n

    Code :
    'dir/a-d/b/o-n "AB*_*_*"'
    ensuite, as-tu enlever le ECHO de echo del "%%a"

  14. #14
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut

    Salut,

    Merci à vous pour l'aide précieuse que vous m'avez apporté !!!!!

    Me voilà pourvu de deux solutions qui fonctionnent parfaitement....

    En effet I'm Here j'avais en bon boulet oublié d'oter le echo dans le script fourni... Là cela va beaucoup mieux en effet !!!!!

    Merci à vous pour votre aide efficace.... Cela me motive pour me plonger dans le "scripting" et j'espère un jour pouvoir aider des débutants comme vous savez si bien le faire....

    Encore merci et @ bientôt !!!

  15. #15
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro Walid Toumi
    Inscrit en
    juillet 2008
    Messages
    956
    Détails du profil
    Informations personnelles :
    Nom : Homme Walid Toumi
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 956
    Points : 1 587
    Points
    1 587

    Par défaut

    Salut,
    En vérité les scripts proposés ne répondaient pas à ton problème.. essayes avec ces fichiers pour voir si ça marche ou pas..
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ab111111 _ 02-2009 _ 02.txt
    ab111111 _ 08-2009 _ 13.txt
    ab111111 _ 09-2009 _ 14.txt
    ab111111 _ 10-2009 _ 18.txt
    ab111111 _ 10-2009 _ 19.txt
    ab112211 _ 04-2009 _ 02.txt
    ab112211 _ 10-2008 _ 01.txt
    ab117110 _ 12-2007 _ 21.txt
    voici un script plus robuste et plus flexible:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=1*delims=_" %%a in ('"dir/a-d/b "AB*_*_*"|Sort /r /+20"') do (
        set "a=%%a"
      (If "!a!" neq "!b!" (echo ERASE "%%a_%%b") Else (echo ERASE "%%a_%%b"))>>~"!a!"~
        set "b=%%a"
    )
    for /f "tokens=1*delims=[]" %%m in ('"find /n /v "" "~AB*~"|find /v "[1]""') do echo. %%n
    del ~*~
    Endlocal & pause & goto:EOF
    => N'oublies pas d'enlever le echo. après vérification

  16. #16
    Invité de passage
    Inscrit en
    septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : septembre 2009
    Messages : 23
    Points : 1
    Points
    1

    Par défaut

    Citation Envoyé par I'm_HERE Voir le message
    Salut,
    En vérité les scripts proposés ne répondaient pas à ton problème.. essayes avec ces fichiers pour voir si ça marche ou pas..
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ab111111 _ 02-2009 _ 02.txt
    ab111111 _ 08-2009 _ 13.txt
    ab111111 _ 09-2009 _ 14.txt
    ab111111 _ 10-2009 _ 18.txt
    ab111111 _ 10-2009 _ 19.txt
    ab112211 _ 04-2009 _ 02.txt
    ab112211 _ 10-2008 _ 01.txt
    ab117110 _ 12-2007 _ 21.txt
    voici un script plus robuste et plus flexible:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=1*delims=_" %%a in ('"dir/a-d/b "AB*_*_*"|Sort /r /+20"') do (
        set "a=%%a"
      (If "!a!" neq "!b!" (echo ERASE "%%a_%%b") Else (echo ERASE "%%a_%%b"))>>~"!a!"~
        set "b=%%a"
    )
    for /f "tokens=1*delims=[]" %%m in ('"find /n /v "" "~AB*~"|find /v "[1]""') do echo. %%n
    del ~*~
    Endlocal & pause & goto:EOF
    => N'oublies pas d'enlever le echo. après vérification
    Salut,

    Merci pour ce code....

    Je regarde ça !!!! Et oui je pense aux echo !!!! !!!!

    Merci.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •