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
check out my answered question about the exact same topic, it was answered perfectly.
how to replace a string on the second line in a text file using a batch file?
hope this helps!
You need to create the empty file entities_1.xml
, because for some obscure reason >>
won't create it with cmd as shell.
So use TYPE NUL > entities_1.xml
just before your FOR
loop, to create a zero-byte long file.
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.