Самый простой способ - изменить шаблон так, чтобы он выглядел примерно так:
env.name=!env.name!
env.prop=!env.prop!
product.images.dir=/opt/web-content/product-images
А затем используйте цикл FOR для чтения и записи файла, когда включено отложенное расширение:
@echo off
setlocal enableDelayedExpansion
set "env.name=abc"
set "env.prop=xyz"
(
for /f "usebackq delims=" %%A in ("template.txt") do echo %%A
) >"myFile.txt"
Обратите внимание, что гораздо быстрее использовать одно перенаправление перезаписи >
для всего цикла, чем использовать перенаправление добавления >>
внутри цикла.
Выше предполагается, что ни одна строка в шаблоне не начинается с ;
. Если это так, вам нужно изменить опцию FOR EOL на символ, который никогда не будет начинать строку. Возможно равен - for /f "usebackq eol== delims="
Также в приведенном выше примере предполагается, что шаблон не содержит пустых строк, которые необходимо сохранить. Если есть, то вы можете изменить вышеперечисленное следующим образом (это также устраняет любую потенциальную проблему EOL)
@echo off
setlocal enableDelayedExpansion
set "env.name=abc"
set "env.prop=xyz"
(
for /f "delims=" %%A in (`findstr /n "^" "template.txt"') do (
"set ln=%%A"
echo(!ln:*:=!
)
) >"myFile.txt"
Существует один последний потенциальный осложняющий вопрос - у вас могут возникнуть проблемы, если шаблон содержит литералы !
и ^
. Вы можете либо избежать символов в шаблоне, либо использовать дополнительную замену.
template.txt
Exclamation must be escaped^!
Caret ^^ must be escaped if line also contains exclamation^^^!
Caret ^ should not be escaped if line does not contain exclamation point.
Caret !C! and exclamation !X! could also be preserved using additional substitution.
извлечение из templateProcessor.bat
setlocal enableDelayedExpansion
...
set "X=^!"
set "C=^"
...