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 :

Filtre sur nom de fichier


Sujet :

Scripts/Batch

  1. #1
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut Filtre sur nom de fichier
    Bonjour,

    Voici deux questions :

    1) Quelle est la différence entre les deux boucles suivantes ?
    for /R "C:\Temp" %%i in (*.*)
    for /f %%i in ('dir /b "C:\Temp"')

    2) Comment utiliser la fonction ^|findstr /i /r "machaine" dans ces boucles ?

    J'ai fait de nombreux essais mais ma syntaxe est fausse à chaque fois.

    Merci pour toute aide.

    Philippe

  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
    Par défaut
    salut,

    pour ta 1er question
    pour ta 2eme question voir dans la FAQ

  3. #3
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci,

    Concernant la FAQ, j'avais effectivement vu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f "delims=" %%i in ('type "fichier.txt" ^|findstr /i /r "jul"') do echo %%i
    Mais, et c'est certainement tout bête, je n'arrive pas à intégrer le findstr dans ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f %%i in ('dir /b "C:\Temp"')
    Philippe

  4. #4
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Pour le filtrage, la commande "dir" peut se suffire à elle-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f %%i in ('dir /b "C:\Temp\*tachaine*"') do ...
    sinon avant find ou findstr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f %%i in ('dir /b "C:\Temp" ^| findstr /i "tachaine" ') do ...

  5. #5
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci, mais je tourne en rond...

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /R "C:\Temp" %%i in (*machaine*.*) do (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f %%i in ('dir /b "C:\Temp" ^| findstr /i "machaine"') do (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f %%i in ('dir /b "C:\Temp\*machaine*.*"') do (
    Et rien ne passe.

    Remarque : mes fichiers ne sont pas directement sous C:\Temp, mais dans des sous-répertoires et des sous-sous-répertoires.

    Philippe

  6. #6
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    il faut ajouter le paramètre "/s" à la commande "dir"
    pour la prise en compte des répertoires et sous-répertoires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f %%i in ('dir /b /s ...
    Pour plus d'infos, tape dir /? sur ta ligne de commande

  7. #7
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci beaucoup.

    ça a marché !

    ... sauf pour les fichiers dont le nom contient un espace.
    J'ai ajouté "delims=" et tout est ok.


    Une dernière question : si je veux faire un test sur chaine1 ou chaine2, je suppose que je dois le faire dans mon do () suivant le for, afin de pouvoir traiter toutes les conditions souhaitées.

    Quelle instruction peut me dire si chaine1 est inclue dans chainetest ?

    Merci encore et bonne soirée.

    Philippe

  8. #8
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Citation Envoyé par Pgs Voir le message
    ... sauf pour les fichiers dont le nom contient un espace.
    J'ai ajouté "delims=" et tout est ok.
    Pour ça tu peux mettre "tokens=*"

    Citation Envoyé par Pgs Voir le message
    Une dernière question : si je veux faire un test sur chaine1 ou chaine2
    Tu peux confier ce traitement à findstr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%i in ('dir /s /b "C:\Temp" ^| findstr /i "chaine1 chaine2"') do ...

  9. #9
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci beaucoup.

    Sinon, hors du for, comment tester si une chaîne en contient une autre ?

    Philippe

  10. #10
    Membre émérite
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Points : 2 274
    Points
    2 274
    Par défaut
    Avec find ou findstr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo chaineABC | findstr /i "chaineA" > NUL
    if not errorlevel 1 echo la chaine contient chaineA

  11. #11
    Pgs
    Pgs est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Points : 100
    Points
    100
    Par défaut
    Merci

Discussions similaires

  1. [Débutant] Tri sur noms de fichiers
    Par Andrian dans le forum C#
    Réponses: 1
    Dernier message: 27/03/2013, 10h08
  2. indirection sur nom de fichier/rubrique ?
    Par scarface38 dans le forum WinDev
    Réponses: 2
    Dernier message: 09/03/2009, 09h47
  3. Ouverture conditionnelle sur nom de fichier
    Par cchampion2fr dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 07/10/2008, 10h46
  4. séparation d'extension sur nom de fichier
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/02/2008, 22h50
  5. Filtre sur noms machines
    Par elbossoso dans le forum Programmation et administration système
    Réponses: 6
    Dernier message: 07/12/2006, 03h16

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