O problema é a expansão da variável. Se a variável for modificada dentro do bloco de código for
, para acessar seu valor dentro do mesmo bloco, você precisa de uma expansão atrasada.
Mas você não pode fazer algo como !lineString:!to_replace!=!
, pois o analisador interpretará a abertura !
em to_replace
como a terminação og lineString
.
Então, você tem duas opções.
O mais fácil precisa que o valor a ser substituído seja conhecido antes do início do comando for
. Apenas defina to_replace
antes do comando for
. Quando o analisador atingir o comando for
, a variável terá o valor correto e será expandida adequadamente.
Mas se por algum motivo você tiver que definir o valor da variável dentro do comando for
, você precisará alterar seu código como
for /f "tokens=* delims= " %%a in ( .... ) do (
set "lineString=%%a"
set "to_replace= .... "
for %%b in ("!to_replace!") do set "str2=!lineString:%%~b=!"
echo !str2!
)
Isso armazena o valor na variável em um novo parâmetro for
substituível que é usado na expressão de substituição