Remplacer une ligne dans un fichier

Résolu/Fermé
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 1 juil. 2020 à 10:47
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 3 juil. 2020 à 13:26
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
A voir également:

5 réponses

barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 1 juil. 2020 à 20:38
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 juil. 2020 à 08:51
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
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
2 juil. 2020 à 09:06
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
2 juil. 2020 à 13:02
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
barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 2 juil. 2020 à 15:12
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
3 juil. 2020 à 08:25
Ah oui beaucoup mieux ! :-)
En revanche, j'arrive pas à soustraire les guillemets dans le résultat:
if NOT '&DIRECT' == "'RECV' goto FIN"
0
Je pense que tu as mis %2 au lieu de %~2 à la dernière ligne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
3 juil. 2020 à 13:26
Le diable est dans les détails ! ;-)
Nickel ça marche
Merci encore et beaucoup pour ton aide
A la prochaine ;-)
0