最简单的方法是修改您的模板,使其类似于这样:
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=^"
...
"set ln=%%A"
更改为set "ln=%%A"
(注意第一个双引号的位置)。此外,为了使用名为template_file
的变量,我用^"^"^"%%template_file%%^"^"^"
替换了template.txt
。 - mwag"%template_file%"
。或者如果您想将模板指定为第一个批处理参数,则使用"%~1"
。 - dbenham