0

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

例如“1.txt”中的文本行:ClassName=X

X 根据您搜索的文本行在文件中更改 ClassName= 所以我必须使用 ClassName= 的变量进行搜索

然后我会在另一个文件中搜索“Class=”之后的 X,将其替换为“ShipDummy”这个词。我们将调用第二个文件“2.txt”。第二个文件中的 X 会像这样找到:Class=X。但是,我希望它是 Class=ShipDummy

我会搜索类似于 1.txt 中的布局,但没有“名称”部分,并且 1.txt 也不会得到 ShipDummy。

我还想在替换发生之前备份 2.txt。

此外,1.txt 中有许多 ClassName= 行,它们都具有不同的 x 值。我希望它为每个 x 值提供一个变量,然后在 2.txt 中替换该值。例如:1.txt 中的 ClassName=x(将 2.txt 中的 Class=x 替换为 Class=ShipDummy)

1.txt 中的 ClassName=y(将 2.txt 中的 Class=y 替换为 Class=ShipDummy)

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
4

1 回答 1

0

解决这个问题的最简单方法可能是从相反的方向接近它。

阅读 2.txt 中的每一行。如果该行与 templpate 匹配Class=X,则解析出 X 并搜索以查看是否ClassName=X存在于 1.txt 中。如果确实存在,则写入替换行,否则写入原始行。

您可以使用 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

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

于 2013-02-21T03:35:24.960 回答