gpt4 book ai didi

windows - 用于查找/替换文件内文本的批处理命令

转载 作者:可可西里 更新时间:2023-11-01 09:56:17 24 4
gpt4 key购买 nike

我有一个模板文件(例如 myTemplate.txt),我需要进行一些编辑以从该模板创建我自己的文件(例如 myFile.txt)。

因此模板包含如下行

env.name=
env.prop=
product.images.dir=/opt/web-content/product-images

现在我想将其替换如下;

env.name=abc
env.prop=xyz
product.images.dir=D:/opt/web-content/product-images

所以我正在寻找批处理命令来执行以下操作;

1. Open the template file.
2. Do a kind of find/replace for the string/text
3. Save the updates as a new file

我如何实现这一点?

最佳答案

最简单的方法是将模板修改为如下所示:

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"

还有最后一个潜在的复杂问题 - 如果模板包含 !^ 文字,您可能会遇到问题。您可以转义模板中的字符,也可以使用一些额外的替换。

模板.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=^"
...

关于windows - 用于查找/替换文件内文本的批处理命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9257193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com