2012-08-09 20 views
7

Tengo problemas para hacer que este archivo por lotes sustituya las subcadenas cuando se usan variables. Específicamente cuando el! Original! la variable está especificada; si es una cadena literal, funciona bien. Sin embargo, esto no servirá para mi uso.Reemplazo de subcadena de archivo por lotes utilizando las variables

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

Su ayuda es muy apreciada.

Respuesta

3

Ha invertido su orden de expansión.

normal (por ciento) de expansión se produce en tiempo de análisis (primera)
retardada de expansión (exclamación) se produce en tiempo de ejecución (segundo)

La búsqueda y reemplazo términos deben ampliarse antes de la búsqueda y reemplazo puede tener lugar . Por lo que desea:

set str=!str:%original%=%replacement%! 
+0

Gracias, eso puede haber sido un problema adicional mío. Creo que mi problema fue la falta de comprensión de cómo funcionan las declaraciones IF en los archivos por lotes. Lo había colocado en la sección THEN de mi declaración IF y creo que esa es la razón por la que tuve los resultados de una sola variable que se evalúa. Este enlace me ayudó: http://stackoverflow.com/questions/4367297/how-to-substitute-variable-contents-in-dos – delpium

12

Si utiliza call se puede hacer esto sin la necesidad de setlocal enabledelayedexpansion, así:

call set str=%%str:%original%=%replacement%%%

Nota: Esta primera consigue analiza para call set str=%str:chair=table%

Cuestiones relacionadas