我想在一个文件中使用变量进行搜索,然后获取该变量结果并替换另一个文件中的部分文本。
对于“1.txt”中的例子我有一个文本行: 类名= X
X在文件中发生变化,具体取决于您搜索的文本行ClassName =所以我必须使用ClassName =
的变量进行搜索然后我会在“Class =”之后的另一个文件中搜索X,将其替换为“ShipDummy”。我们将调用第二个文件“2.txt”。第二个文件中的X将如下所示:Class = X.但是,我希望它是Class = ShipDummy
我会搜索类似于1.txt中的布局,但没有“Name”部分,而且.txt也不会得到ShipDummy。
我还想在替换之前备份2.txt。
此外,1.txt中有许多ClassName =行,所有行都有不同的x值。我希望它为每个x值提供一个变量,然后在2.txt中替换该值。例如: 1.txt中的ClassName = x(在2.txt中将Class = x替换为Class = ShipDummy)
ClassName = y in 1.txt(在2.txt中用Class = ShipDummy替换Class = y)
1.txt中的ClassName = z(在2.txt中将Class = z替换为Class = ShipDummy)
依旧......
请记住,在上面我使用x,y和z作为变量。
我怎么做这一切?我是编码的新手,而且非常复杂。我想在批处理文件中这样做。
我拥有的是这样的东西,但我迷失了:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in (1.txt) do
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%A in ("!var2!") do echo !var1:Name=%%A!
exit
答案 0 :(得分:0)
解决这个问题的最简单方法可能就是从反方向接近它。
读取2.txt中的每一行。如果该行与templpate Class=X
匹配,则解析X并搜索以查看1.txt中是否存在ClassName=X
。如果确实存在,则写入替换行,否则写入原始行。
您可以使用FINDSTR在文件中搜索字符串。您不关心输出,因此输出重定向为null。如果先前命令(FINDSTR)成功(匹配),&&
运算符将有条件地执行代码。
@echo off
setlocal enableDelayedExpansion
>2.txt.new (
for /f "delims=" %%A in (2.txt) do (
set "ln=%%A"
if "!ln:~0,6!" == "Class=" findstr /c:"ClassName=!ln:~6!" 1.txt >null && set "ln=Class=ShipDummy"
echo !ln!
)
)
move 2.txt.new 2.txt
上面的脚本未经测试,但概念应该有效。还有很大的改进空间。