批处理 - 我想在一个文件中使用变量进行搜索,并将该变量结果替换为另一个文件

时间:2013-02-20 23:40:49

标签: batch-file batch-processing

我想在一个文件中使用变量进行搜索,然后获取该变量结果并替换另一个文件中的部分文本。

对于“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

1 个答案:

答案 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

上面的脚本未经测试,但概念应该有效。还有很大的改进空间。