Remplacer une ligne dans un fichier

Résolu
Ka-El Messages postés 279 Statut Membre -  
Ka-El Messages postés 279 Statut Membre -
Bonjour,
Je vous présente mon problème.
Voilà j'ai un fichier texte composé de plusieurs lignes.
L'une d'entre elles se présente ainsi:
if NOT '%x_direction%' == 'I' goto FIN

Et mon but serait de la remplacer par la formule suivante:
if NOT '&DIRECT' == 'RECV' goto FIN

j'ai essayé plein de trucs, mais je n'arrive pas à gérer les espaces qui entourent le "=="
Est-ce quelqu'un aurait une idée ?
Merci d'avance pour votre aide
K

5 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Salut,

    Je ne vois pas de problème d'espace, le seul problème que je vois est la présence de l'esperluette & qui est un caractère spécial et qui doit donc être échappé :

    https://www.robvanderwoude.com/escapechars.php

    0
  2. Ka-El Messages postés 279 Statut Membre
     
    Hello Barnabe,
    En fait, j'essaye de faire la manip à l'aide d'une solution que tu m'avais précédemment communiqué.
    Mais je suis peut être sur une mauvaise piste ?

    for %%E in (*.*) do (
    for /f "skip=2 tokens=1,* delims=]" %%A in ('find /V "" /N "%%~E"') do (

    set "string=%%~B"

    call:substitution "%%%%x_direction%%%%" DIRECT
    call:substitution "%%%== ^'I%%%" == 'RECV'

    echo.!string!
    echo.!string!>> "%%~E"

    )
    del /f "%%~E"

    )
    :substitution

    if not "!string!"=="" (set "string=!string:%~1=&%2!")


    Sur mon essai ci-dessus, le 1er call est OK
    En revanche, pour le 2nd ça ne donne rien... Enfin là je tentais un peu à l'arrache...
    je ne vois pas trop comment faire et si surtout je suis pas dans l'erreur en adoptant cette méthode.
    A ton avis ?
    K
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Dans le deuxième CALL tes paramètres sont mal délimités.

      Les paramètres sont délimités par un espace, si un des paramètres doit contenir des espaces alors il faut entourer ce paramètre avec des double-quotes " "
      0
  3. Ka-El Messages postés 279 Statut Membre
     
    Ben mince Barnabe, j'ai beau mettre des double-quotes partout, le script ne change aucunement la ligne.
    J'ai tenté tout ça:
    call:substitution "%%%" == ^'I"%%%" "== 'RECV"
    call:substitution "%%%"== ^'I^'"%%%" == 'RECV'
    call:substitution "%%%'I'%%%" "== 'RECV"
    call:substitution "%%%" 'I' "%%%" "== 'RECV'"

    Et d'autres choses...

    Il n'y aurait pas un autre aspect à revoir dans le script ?
    0
    1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
       
      Est-ce que c'est mieux comme ça :

      for %%E in (*.*) do (
      for /f "skip=2 tokens=1,* delims=]" %%A in ('find /V "" /N "%%~E"') do (

      set "string=%%~B"

      call:substitution "'%x_direction%'" "'&DIRECT'"
      call:substitution "'I' goto FIN" "'RECV' goto FIN"

      echo.!string!
      echo.!string!>> "%%~E"

      )
      del /f "%%~E"

      )
      :substitution

      if not "!string!"=="" (set "string=!string:%~1=%~2!")
      0
  4. Ka-El Messages postés 279 Statut Membre
     
    Ah oui beaucoup mieux ! :-)
    En revanche, j'arrive pas à soustraire les guillemets dans le résultat:
    if NOT '&DIRECT' == "'RECV' goto FIN"
    0
    1. barnabe0057
       
      Je pense que tu as mis %2 au lieu de %~2 à la dernière ligne.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ka-El Messages postés 279 Statut Membre
     
    Le diable est dans les détails ! ;-)
    Nickel ça marche
    Merci encore et beaucoup pour ton aide
    A la prochaine ;-)
    0