2010-05-05 7 views
68

Nous pouvons remplacer les chaînes dans un fichier de commandes en utilisant la commande suivanteremplacement chaîne dans le fichier batch

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

Ces lignes fonctionnent bien et changer la chaîne « sauter par-dessus la chaise » à « sauter par-dessus la table ». Maintenant, je veux remplacer le mot "chaise" dans la chaîne avec une variable et je ne sais pas comment le faire.

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

Des idées?

+0

double possible de [comment remplacer la chaîne dans un fichier de chauve-souris avec le paramètre de ligne de commande string] (http://stackoverflow.com/questions/5816178/how-to-replace-string-inside-a-bat-file-with-command-line-parameter-string) qui a une réponse beaucoup plus informelle (il a les mêmes solutions que les réponses ici) – Fr0sT

+1

maintenant ce n'est pas important qui était le premier, mais il est bon de lier des questions identiques et de pointer vers la réponse la plus irréfragable. – Fr0sT

Répondre

56

Vous pouvez utiliser!, Mais le commutateur ENABLEDELAYEDEXPANSION doit être activé.

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

Vous pouvez utiliser la petite astuce suivante:

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

Le call il provoque une autre couche d'expansion variables, ce qui rend nécessaire de citer les signes % d'origine, mais tout fonctionne à la fin.

+0

J'aime cette solution, échapper des chaînes est toujours problématique dans les fichiers batch, ENABLEDELAYEDEXPANSION ajoute juste un autre caractère à s'inquiéter. – Anders

+5

Chose importante concernant la réponse fournie par ** Joey **. Que vous devez mettre le code dans un fichier batch pour que cela fonctionne. Si vous le testez simplement en ligne de commande, il retournera un saut inattendu de% sur le mot %%%. Sachez simplement que le code dans les fichiers batch et dans la ligne de commande peut produire des résultats différents. – dadhi

+0

En se basant sur le commentaire de dadhi, la solution pour la ligne de commande est ici: https://stackoverflow.com/questions/29944902/how-to-replace-with-percent-character-in-cmd-exe. –

-4

c:> replace.bat "123def789" "def" "456"


 replace.bat 

setlocal enabledelayedexpansion 
set data=%1 
set search=%2 
set replace=%3 
set "data=!data:%search%=%replace%!" 
echo %data% 
REM Use %data% here before calling endlocal. 
endlocal 
+0

Qu'est-ce que cela fait? Les futurs visiteurs peuvent ne pas comprendre ce code du tout. – SteveFest

+0

ici je tiens à mentionner que vous devez utiliser des données variables avant endlocal. –