Remplacer une ligne dans un fichier [Résolu]

Signaler
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020
-
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020
-
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

Messages postés
12762
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
25 octobre 2020
3 697
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



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

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
Messages postés
12762
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
25 octobre 2020
3 697
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 " "
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

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 ?
Messages postés
12762
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
25 octobre 2020
3 697
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!")
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Ah oui beaucoup mieux ! :-)
En revanche, j'arrive pas à soustraire les guillemets dans le résultat:
if NOT '&DIRECT' == "'RECV' goto FIN"
Je pense que tu as mis %2 au lieu de %~2 à la dernière ligne.
Messages postés
260
Date d'inscription
lundi 28 novembre 2011
Statut
Membre
Dernière intervention
7 août 2020

Le diable est dans les détails ! ;-)
Nickel ça marche
Merci encore et beaucoup pour ton aide
A la prochaine ;-)