Signo de exclamación que se elimina constantemente en un archivo por lotes

Alguien por favor ayuda ... Oh, estaré muy agradecido. Tengo un archivo por lotes muy largo que funciona perfectamente, excepto que cada vez que el usuario ingresa una entrada, reemplaza las cadenas en los archivos deseados, PERO, está eliminando los! S en los archivos que causan problemas debido a que son archivos de configuración XML y se comentan Fuera de las secciones que necesitan para quedarse. No colocaré el código completo aquí a menos que se solicite, pero en una cáscara de nuez, el usuario realiza ciertas entradas y luego se ejecuta el archivo por lotes ... aquí está la parte del código para un archivo ... el usuario ingresa a la unidad Letra de la instalación y nombre del servidor bdi. Quiero que la entrada del usuario reemplace% drive% y% bdi1% .... lo que hace ... pero NO quiero que reemplace las secciones comentadas ... es decir:

<!-- Tcp message preamble and postamble are flags that mark the beginning and end of an HL7 message. turns into <-- Tcp message preamble and postamble are flags that mark the beginning and end of an HL7 message.

¡Fíjate en el sin!

aquí está mi código ... ¿qué debo hacer para obtenerlo y dejar de quitar el!. Intenté mirar aquí y pensé que estaba en camino con las respuestas de Jeb, pero no pude hacerlo funcionar. gracias por adelantado

if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:server_name=%server%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config



if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:bdi_name=%bdi1%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config



if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:share_name=%share%$!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config


if exist newfile.txt del newfile.txt
for /F "usebackq delims=" %%a in ("%drive%:\mckesson\%bdi1%\importer.config") do (
set str=%%a
set str=!str:drive_bdi=%drive%!
echo !str! >> newfile.txt
)
del importer.config
rename newfile.txt importer.config

Respuestas a la pregunta(1)

Su respuesta a la pregunta