2012-08-09 6 views
7

Non riesco a ottenere questo file batch per eseguire sostituzioni della sottostringa quando vengono utilizzate le variabili. Nello specifico quando l'originale! la variabile è specificata; se è una stringa letterale funziona bene. Tuttavia, questo non lo farà per il mio utilizzo.Sostituzione della sottostringa del file batch utilizzando le variabili

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

Il vostro aiuto è molto apprezzato.

risposta

3

Hai invertito l'ordine di espansione.

normale (per cento) di espansione si verifica in fase di analisi (1 °)
ritardata (esclamativo) di espansione si verifica in fase di esecuzione (2 °)

La ricerca e sostituzione termini deve essere ampliato prima della ricerca e sostituzione può avvenire . Così si vuole:

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

Grazie, quello potrebbe essere stato un ulteriore problema mio. Penso che il mio problema fosse la mancanza di comprensione del funzionamento delle istruzioni IF nei file batch. L'avevo inserito nella sezione THEN della mia dichiarazione IF e credo che sia il motivo per cui ho ottenuto il risultato di una sola variabile valutata. Questo link mi ha aiutato: http://stackoverflow.com/questions/4367297/how-to-substitute-variable-contents-in-dos – delpium

12

Se si utilizza call si può fare questo senza la necessità di setlocal enabledelayedexpansion, in questo modo:

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

Nota: Questo primo ottiene analizzato per call set str=%str:chair=table%