117 votes

Remplacement de chaînes dans un fichier batch

Nous pouvons remplacer des chaînes de caractères dans un fichier batch en utilisant la commande suivante

set str="jump over the chair"
set str=%str:chair=table%

Ces lignes fonctionnent bien et changent la chaîne "jump over the chair" en "jump over the table". Maintenant, je veux remplacer le mot "chaise" dans la chaîne par une variable et je ne sais pas comment faire.

set word=table
set str="jump over the chair"
??

Des idées ?

99voto

Joey Points 148544

Vous pouvez utiliser la petite astuce suivante :

set word=table
set str="jump over the chair"
call set str=%%str:chair=%word%%%
echo %str%

El call il y a une autre couche d'expansion de variables, ce qui rend nécessaire de citer l'original % des signes mais tout finit par s'arranger.

89voto

Vicky Points 6749

Vous pouvez utiliser !, mais vous devez avoir le commutateur ENABLEDELAYEDEXPANSION activé.

setlocal ENABLEDELAYEDEXPANSION
set word=table
set str="jump over the chair"
set str=%str:chair=!word!%

0voto

Rachel Nichols Points 11

J'ai pu utiliser la réponse de Joey pour créer une fonction :

Utilisez-le comme :

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET "MYTEXT=jump over the chair"
echo !MYTEXT!
call:ReplaceText "!MYTEXT!" chair table RESULT
echo !RESULT!

GOTO:EOF

Et ces Fonctions au bas de votre Fichier Batch.

:FUNCTIONS
@REM FUNCTIONS AREA
GOTO:EOF
EXIT /B

:ReplaceText
::Replace Text In String
::USE:
:: CALL:ReplaceText "!OrginalText!" OldWordToReplace NewWordToUse  Result
::Example
::SET "MYTEXT=jump over the chair"
::  echo !MYTEXT!
::  call:ReplaceText "!MYTEXT!" chair table RESULT
::  echo !RESULT!
::
:: Remember to use the "! on the input text, but NOT on the Output text.
:: The Following is Wrong: "!MYTEXT!" !chair! !table! !RESULT!
:: ^^Because it has a ! around the chair table and RESULT
:: Remember to add quotes "" around the MYTEXT Variable when calling.
:: If you don't add quotes, it won't treat it as a single string
::
set "OrginalText=%~1"
set "OldWord=%~2"
set "NewWord=%~3"
call set OrginalText=%%OrginalText:!OldWord!=!NewWord!%%
SET %4=!OrginalText!
GOTO:EOF

Et n'oubliez pas que vous DEVEZ ajouter "SETLOCAL ENABLEDELAYEDEXPANSION" en haut de votre fichier batch, sinon rien de tout cela ne fonctionnera correctement.

SETLOCAL ENABLEDELAYEDEXPANSION
@REM # Remember to add this to the top of your batch file.

-4voto

Cela fonctionne bien

@echo off    
set word=table    
set str=jump over the chair    
set rpl=%str:chair=%%word%    
echo %rpl%

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X