I have an XML file and I have a batch file to search for a specific string within that file, replace it with a string defined by the user and then output it to a new XML fil
It's the wrong way of receiving a line by set str=%%G while the delayed expansion is enabled.
It's because the delayed expansion phase is after the %%v expansion phase.
With disabled delayed expansion you got the problem, that you can not replace the string in a safe way. So you have to toggle the delayed expansion.
@echo off > entities_1.xml
setLocal DisableDelayedExpansion
if exist entities_1.xml del entities_1.xml
set /p name= What is the new space NAME?
for /f "tokens=* delims= " %%G in (entities.xml) do (
set str=%%G
setLocal EnableDelayedExpansion
set str=!str:[Test Space]=[%name%]!
>> entities_1.xml echo(!str!
endlocal
)
Switching the redirection, so you didn't append always a space.
Using echo(, so you get not echo is on if the !str! is empty.