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 :

Récupérer tous les fichiers selon certains critères


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut Récupérer tous les fichiers selon certains critères
    Bonjour
    j'ai besoin de récupérer récursivement dans un dossier tous les fichier jpg contenant '_pan' et ce trouvant dans un sous-dossier 'pwg_high'

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set DIRsource="C:\MonRep"
    FOR %%f  in ('DIR /B /S %DIRsource%\*\pwg_high\*_pan.jpg') do echo "%%f"
    mais il semble que '*' ne convient pas pour signaler des sous-dossier
    j'ai eu beau rechercher d'autre solution je n'ai rien trouvé

  2. #2
    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

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 56
    Points
    56
    Par défaut
    je connaissais merci, mais je ne comprend que dalle à cette doc, on dirait des lois....

    en tout cas quelqu'un d'autre m'a aidé, une solution peut être pas très conventionnelle mais qui me suffit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dir "%DIRsource%\" /s /b > "%DIRsource%\ListeFichiers01.txt"
    findstr /c:"pwg_high" "%DIRsource%\ListeFichiers01.txt" > "%DIRsource%\ListeFichiers02.txt"
    findstr /c:"_pan" "%DIRsource%\ListeFichiers02.txt" > "%DIRsource%\ListeFichiers03.txt"
    for /f "delims=" %%f in (%DIRsource%\ListeFichiers03.txt) do echo "%%f"
    del "%DIRsource%\*.txt"

  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,

    si t'as bien lis la doc tu verras qu'une simple boucle FOR est amplement suffisante dans ton cas

  5. #5
    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 tout le monde,

    Citation Envoyé par Mistic100 Voir le message
    une solution peut être pas très conventionnelle
    C'est le moins qu'on puisse dire.


    Voici un exemple d'approche,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set dirsource=c:\monrep
    dir /s /b /a-d  %dirsource% | findstr /i /r "\\pwg_high\\.*_pan.jpg"
    ou encore, si le dossier cible est d'une taille conséquente,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set dirsource=c:\monrep
    dir /s /b /a-d  "%dirsource%\*_pan.jpg" | findstr /i /r "\\pwg_high\\.*_pan.jpg"
    Attention à ne pas mettre de guillemets lors de l'initialisation de ta variable dirsource (set dirsource=).

    Dans la mesure du possible, il faut éviter l'usage de «for», car le temps nécessaire pour son traitement est en général plus long, toute proportion gardée, bien sûr.

    enjoy;

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r "C:\MonRep" %%a in ("pwg_high\*_pan.jpg") do echo "%%a"
    ?

  7. #7
    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 I'm_HERE Voir le message
    ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r "C:\MonRep" %%a in ("\pwg_high\*_pan.jpg") do echo "%%a"
    ??


  8. #8
    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
    @Mistic100

    aussi quelques remarques sur le code proposé par "Mistic100"

    va matcher tous les répertoires CONTENANT dans leurs noms la chaîne "pwg_high" c-à-d firstpwg_highlast sera aussi traiter.
    il faut délimiter/fixer la chaîne à rechercher, plusieurs façons s'offrent à toi, l'une d'elle: comme à fait maxi_um dans sa contribution "\\pwg_high\\"



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    del "%DIRsource%\*.txt"
    oui mais il faut prendre garde de ne pas mettre une extension connu ex: txt il faut mettre toujours une extension inconnu (.### .$$$..etc) au cas ou.., aussi tu peux mettre tous les fichiers temporaires dans le dossier %TEMP% (qui est fait pour ça) ex: @maxim_um

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >type max.bat
    
    >for /r "C:\MonRep" %%a in ("\pwg_high\*_pan.jpg") do echo "%%a"
    
    >max.bat
    
    "c:\MonRep\sous Dossier\\pwg_high\image1_pan.jpg"
    "c:\MonRep\sous Dossier\\pwg_high\image2_pan.jpg"
    "c:\MonRep\sous Dossier\\pwg_high\image3_pan.jpg"
    ???

  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
    Citation Envoyé par I'm_HERE Voir le message
    @Mistic100

    aussi quelques remarques sur le code proposé par "Mistic100"

    va matcher tous les répertoires CONTENANT dans leurs noms la chaîne "pwg_high" c-à-d firstpwg_highlast sera aussi traiter.
    il faut délimiter/fixer la chaîne à rechercher, plusieurs façons s'offrent à toi, l'une d'elle: comme à fait maxi_um dans sa contribution "\\pwg_high\\"
    Attention I'm_HERE,

    Dans mon code, j'ai utilisé une «expression régulière» et non littérale. Saches qu'elle ne peut être utilisée avec le commutateur «/c» de «findstr».

    Tiens, encore un non exemple avec «for»:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /r "C:\MonRep" %%a in ("pwg_high\image2_pan.jpg") do echo "%%a"

  10. #10
    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
    j'ai pas parler d'expressions rationnelles dans mon post, j'ai dit simplement qu'il faut matcher le nom precisemment pour ne pas avoir des résultats éronnés.. car la recherche littérale findstr /c:"pwg_high" peut restitué des resultats peux satisfaisants.

    c'est tout

  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 I'm_HERE Voir le message
    j'ai pas parler d'expressions rationnelles dans mon post
    C'est bien pour ça que j'ai apporté cette précision, car le lecteur aurait pu être tenté d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /c:"\\pwg_high\\"
    alors que c'est faux évidemment.

    T'as essayé ma dernière proposition avec «for» ?

  12. #12
    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 maxim_um Voir le message

    T'as essayé ma dernière proposition avec «for» ?
    à vrai dire j'ai supprimer mon "RepTest" je vais voir mais à première vu ça va avoir un rendu peux attendu (car mettre des guillemets dans un nom de fichier précis..),....es-ce qu'il marche chez toi ? @voir en tout cas

  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
    le "pwg_high\image2_pan.jpg" ce n'est plus une expression à évalué mais plutôt une chaîne de caractères qui va se fusionner dans chaque répertoire du répertoire source ...
    essaye ceci pour voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set DIRsource=c:\monrep
    for /r "C:\MonRep" %%a in (pwg_high\image2_pan.jpg) do echo "%%a"

    j'ai pas compris ta démarche

  14. #14
    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 I'm_HERE Voir le message
    le "pwg_high\image2_pan.jpg" ce n'est plus une expression à évalué mais plutôt une chaîne de caractères qui va se fusionner dans chaque répertoire du répertoire source ...
    Absolument.

    Citation Envoyé par I'm_HERE Voir le message
    j'ai pas compris ta démarche
    Simplement t'amener à la conclusion que «for», dans le contexte de cette discussion, n'est pas adapté. On peut aboutir très facilement à des résultats inattendus. Ainsi, outre le souci de fiabilité, il y a en plus le problème de la flexibilité qui n'est pas au rendez-vous. Tu conviendras donc que dans l'absolu, rien n'interdit de remplacer "pwg_high\*.jpg" par "pwg_high\image2_pan.jpg", mais le résultat escompté est tout autre. D'où la mise en garde.

    CQFD

  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
    Citation Envoyé par maxim_um Voir le message
    Simplement t'amener à la conclusion que «for», dans le contexte de cette discussion, n'est pas adapté.
    On peut aboutir très facilement à des résultats inattendus. Ainsi, outre le souci de fiabilité, il y a en plus le problème de la flexibilité qui n'est pas au rendez-vous. Tu conviendras donc que dans l'absolu, rien n'interdit de remplacer "pwg_high\*.jpg" par "pwg_high\image2_pan.jpg", mais le résultat escompté est tout autre. D'où la mise en garde.
    d'abord, merci pour la mise en garde,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r "C:\MonRep" %%a in ("pwg_high\*_pan.jpg") do echo "%%a"
    --> Va lister tous les fichiers jpg se terminant par la chaîne "_pan" et se trouvant quelque part dans un sous-dossier "pwg_high" d'une source "c:\MonRep"

    par contre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r "C:\MonRep" %%a in (pwg_high\image2_pan.jpg) do echo "%%a"
    --> va fusionner la chaîne de caractères "pwg_high\image2_pan.jpg" aux sous-répértoires de "C:\MonRep"

    on voie bien que peux de choses peuvent influencer sur le rendu final, mais la demande de l'OP est claire je cite "j'ai besoin de récupérer récursivement dans un dossier tous les fichier jpg contenant '_pan' et ce trouvant dans un sous-dossier 'pwg_high'"

    je dis ceci car il faut savoir qu'un script en général, répond à une demande BIEN PRECISE..donc il ne faut pas généraliser..

    aussi le problème ici n'est pas la flexibilité et la fiabilité de la boucle "FOR (dans cette discussion)" mais plutôt "les attentes de l'interesser du script" car si sa demande était par exemple: "j'ai besoin de récupérer dans un dossier un fichier 'image2_pan.jpg' et se trouvant dans un sous-dossier 'pwg_high'", alors mon script va changer de forme...

    enfin, je crois qu'il n'y a pas un script/programme PARFAIT il y'aurra toujours un MAIS quelques part...mais c'est ça la vie et le scripting continue..

    Citation Envoyé par maxim_um Voir le message
    CQFD
    c'est ??

  16. #16
    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 I'm_HERE Voir le message
    mais c'est ça la vie et le scripting continue...
    Non, ça c'est le scripting et la vie continue... À moins que pour toi le scripting soit plus important que la vie

    Blague à part, CQFD c'est l'abréviation de «Ce Qu’il Fallait Démontrer».

    C'est vrai qu'un script est en général spécifique pour une situation donnée, mais le fait que ce même script puisse être facilement réutilisable ou adaptable à d'autres fins est un plus indéniable.
    Ici, le risque d'erreurs avec «for» utilisé comme filtre est trop important pour le laisser sous silence, ce qui bien entendu ne change en rien la validité de ta proposition, que je n'ai d'ailleurs pas écrite pour cette raison, mais surtout parce que toi même tu ne l'avais pas fait, ce qui n'aurait pas été cool de ma part, alors que tu chercher à la faire découvrir par le demandeur.
    Quant à ce dernier, ne totalisant que 50 messages sur presque trois ans, je doute qu'il repasse par là, m'enfin, ne sait-on jamais.
    Enfin, en ce qui nous concerne, je pense, qu'on a probablement fait le tour de la question.
    Mais que de postes inutiles pour si peu.

    Bon scripting I'm_HERE...

  17. #17
    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 maxim_um Voir le message

    C'est vrai qu'un script est en général spécifique pour une situation donnée, mais le fait que ce même script puisse être facilement réutilisable ou adaptable à d'autres fins est un plus indéniable.
    ceci en cas de script complexe mais pour les simple codes..

    Citation Envoyé par maxim_um Voir le message
    Ici, le risque d'erreurs avec «for» utilisé comme filtre est trop important pour le laisser sous silence
    on peut règler le problème avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set "_subF=pwg_high\*"
    for /r "C:\MonRep" %%a in ("%_subF%image2_pan.jpg") do echo "%%a"
    ou bien en cas de groupes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set "_subF=pwg_high\*"
    for /r "C:\MonRep" %%a in ("%_subF%*_pan.jpg") do echo "%%a"
    aussi le plus qu'apporte une boucle FOR est qu'on pourra tout faire avec le resultat obtenu "mettre en variable les données,formatage de données..etc"

    Bonne vie maxim_um

Discussions similaires

  1. [XL-2007] Récupérer les fichiers selon des critères
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/01/2015, 17h10
  2. Réponses: 1
    Dernier message: 12/09/2007, 11h42
  3. Réponses: 16
    Dernier message: 12/07/2007, 16h35
  4. Parcourir un répertoire et récupérer tous les fichiers
    Par Sniper94-2 dans le forum Windows
    Réponses: 6
    Dernier message: 08/09/2005, 01h23
  5. [Plugin] Récupérer tous les fichiers *.java d'un workspace
    Par Satch dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 02/06/2004, 12h51

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