IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Supprimer des fichiers dans un répertoire [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    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 éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    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
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    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 chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salut,

    pas bien tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    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
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par I'm_HERE Voir le message
    salut,

    pas bien tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    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
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    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 éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    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
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    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 éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    'dir/a-d/b/o-n "AB*_*_*"'
    ensuite, as-tu enlever le ECHO de echo del "%%a"

  14. #14
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    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 chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 23
    Points : 8
    Points
    8
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Supprimer des fichiers dans un répertoire
    Par Gnux dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 08/05/2012, 09h49
  2. Récupération du noms des fichiers dans un répertoire
    Par tulipelover dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 03/08/2008, 22h47
  3. Impossible de créer des fichiers dans un répertoire
    Par isabelle674 dans le forum Solaris
    Réponses: 11
    Dernier message: 24/01/2008, 01h04
  4. Réponses: 1
    Dernier message: 18/01/2008, 16h19
  5. lire le nom des fichiers dans un répertoire
    Par wonderboutin123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2007, 05h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo