tes*_*dtv 2 windows cmd batch-file
我有一个模板文件(比如myTemplate.txt),我需要做一些编辑来从这个模板创建我自己的文件(比如myFile.txt).
所以模板包含类似的行
env.name=
env.prop=
product.images.dir=/opt/web-content/product-images
Run Code Online (Sandbox Code Playgroud)
现在我希望将其替换如下;
env.name=abc
env.prop=xyz
product.images.dir=D:/opt/web-content/product-images
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找批处理命令来执行以下操作;
1. Open the template file.
2. Do a kind of find/replace for the string/text
3. Save the updates as a new file
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
最简单的方法是修改模板,使其如下所示:
env.name=!env.name!
env.prop=!env.prop!
product.images.dir=/opt/web-content/product-images
Run Code Online (Sandbox Code Playgroud)
然后使用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"
Run Code Online (Sandbox Code Playgroud)
注意>,对整个循环使用一个重写重定向要快得多,然后>>在循环中使用追加重定向.
以上假设模板中没有行开头;.如果他们这样做,那么您需要将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"
Run Code Online (Sandbox Code Playgroud)
最后一个潜在的复杂因素 - 如果模板包含!和^文字,你可能会遇到问题.你可以逃避模板中的字符,也可以使用一些额外的替换.
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.
Run Code Online (Sandbox Code Playgroud)
从templateProcessor.bat中提取
setlocal enableDelayedExpansion
...
set "X=^!"
set "C=^"
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3055 次 |
| 最近记录: |