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 :

Recherche chaine dans variable avec SET [Batch]


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Recherche chaine dans variable avec SET
    Salut,

    je cherche à utiliser cette possibilité de la commande SET : (rechercher une chaine dans une variable et la remplacer par une autre chaine)

    SET chaine_resultante=%chaine_a_traiter:chaine_recherché=[chaine_de_remplacement]% .

    Elle ne passe pas dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    setlocal ENABLEDELAYEDEXPANSION
    
    FOR /F %%a IN (tmp.txt) DO (
    
    	echo a: %%a
    	set rech=%%a
    	set rech=%rech:MAG=%
    
    	echo rech : !rech!
    )
    Explication:
    setlocal ENABLEDELAYEDEXPANSION et !var! : me permet de voir la valeur de la variable var à chaque itération ( c juste pour tester )

    Logiquement ici, set rech=%rech:MAG=% devrait effacer dans la variable rech la chaine MAG seulement si la chaine MAG est présente dans %%a. Or, quelque j'obtiens la chaine suivante dans rech : MAG= quelle que soit la valeur de %%a.

    Ai-je bien expliqué mon problème ?
    Merci d'avance pour vos réponses

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 29
    Points : 52
    Points
    52
    Par défaut
    set rech=!rech:MAG=!

    essaye avec des !. Dès que tu es dans une section entre parenthèses, si tu utilises des % tu obtiens la valeur de la variable avant d'entrer dans la section.

    Seule exception, les variables de la boucle en %% (%%a dans ton cas)

    Voir la faq sur les batchs, c'est expliqué avec un peu plus de détails

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci raivac pour ta réponse mais je crois que tu n'as pas bien compris mon problème
    Je suis au courant de l'histoire des !, je l'explique même dans mon poste.

    Ce que je cherche à faire dans ma boucle c'est :

    lire une ligne de mon fichier tmp.txt et la mettre dans %%a
    mettre la chaine contenu dans %%a dans la variable rech
    effacer la chaine de caractère MAG si elle est présente dans rech
    En exemple ca donne :

    extrait tmp.txt :
    ligne 1: ========================
    ligne 2: MAG 0513


    Premier passage de ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo a: %%a ##  a: ========================
    set rech=%%a ## rech= =======================
    set rech=%rech:MAG=% ##rech= =======================
    echo rech : !rech! ## rech : =======================

    Deuxieme passage de ma boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo a: %%a ##  a: MAG 0513
    set rech=%%a ## rech= MAG 0513
    set rech=%rech:MAG=% ##rech= 0513
    echo rech : !rech! ## rech : 0513

    Le résultat que j'obtiens quel que soit le contenu des lignes de mon fichier est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo rech : !rech! ## rech : MAG=

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 29
    Points : 52
    Points
    52
    Par défaut
    Hello,

    je viens de tester ton cmd (1er message) avec ma modif et ca marche très bien:
    @echo off
    setlocal ENABLEDELAYEDEXPANSION

    FOR /F %%a IN (tmp.txt) DO (

    echo a: %%a
    set rech=%%a
    set rech=!rech:MAG=!

    echo rech : !rech!
    )
    pause

    le fichier tmp.txt que j'ai utilisé:
    ligne1
    ligne2
    ligne3MAG
    ligne4

    Thierry

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Salut raivac,

    ton code marche bien, c'est finalement moi qui n'avais pas bien compris ta réponse

    Merci !

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

Discussions similaires

  1. Recherche chaine dans colonne
    Par scouby64 dans le forum Excel
    Réponses: 2
    Dernier message: 08/12/2008, 17h57
  2. Recherche chaine dans une liste
    Par Clorish dans le forum Général Java
    Réponses: 7
    Dernier message: 28/03/2008, 12h49
  3. [Problème] Recherche précise dans variable
    Par maloute80 dans le forum Langage
    Réponses: 12
    Dernier message: 10/12/2007, 14h37
  4. recherche chaine dans tableau
    Par mathieu57 dans le forum Langage
    Réponses: 1
    Dernier message: 02/10/2007, 13h29
  5. Recherche chaine dans un fichier
    Par matt8-5 dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2006, 17h07

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