2010-05-05 22 views
68

Podemos reemplazar cadenas en un archivo por lotes utilizando el siguiente comandosustitución de cadenas en el archivo por lotes

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

Estas líneas funcionan bien y cambiar el "saltar por encima de la silla" cadena a "saltar por encima de la mesa". Ahora quiero reemplazar la palabra "silla" en la cadena con alguna variable y no sé cómo hacerlo.

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

¿Alguna idea?

+0

posible duplicado de [cómo reemplazar cadena dentro de un archivo bat con el parámetro de línea de comandos string] (http://stackoverflow.com/questions/5816178/how-to-replace-string-inside-a-bat-file-with-command-line-parameter-string) que tiene una respuesta mucho más informal (tiene las mismas soluciones que las respuestas aquí) – Fr0sT

+1

ahora no es importante quién fue el primero, pero es bueno vincular preguntas idénticas y señalar la respuesta más irrefragable. – Fr0sT

Respuesta

56

Puede usar!, Pero debe tener activado el interruptor ENABLEDELAYEDEXPANSION.

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

Usted puede utilizar el siguiente truco:

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

El call no provoca otra capa de la expansión de variables, por lo que es necesario citar los originales % signos, pero todo se resuelve al final.

+0

Me gusta esta solución, el escaparse de cadenas siempre es problemático en los archivos por lotes, ENABLEDELAYEDEXPANSION simplemente agrega otro personaje del que preocuparse. – Anders

+5

Lo importante con respecto a la respuesta proporcionada por ** Joey **. Que necesita poner el código en el archivo por lotes para que funcione. Si solo lo prueba en la línea de comando, devolverá el inesperado salto "%" sobre la "palabra %%%". Solo tenga en cuenta que ese código en los archivos por lotes y en la línea de comandos puede producir resultados diferentes. – dadhi

+0

Sobre la base de los comentarios directos de dadhi, la solución para la línea de comandos está aquí: 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é hace esto? Los futuros visitantes pueden no entender esos códigos en absoluto. – SteveFest

+0

aquí quiero mencionar que necesita utilizar datos variables antes de endlocal. –

Cuestiones relacionadas