【问题标题】:Batch - I would like to search with a variable in one file and replace that variable result in another file批处理 - 我想在一个文件中搜索一个变量并将该变量结果替换为另一个文件
【发布时间】:2013-02-20 23:40:49
【问题描述】:

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

例如“1.txt”中的文本行: 类名=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

【问题讨论】:

    标签: batch-file batch-processing


    【解决方案1】:

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

    读取 2.txt 中的每一行。如果该行与模板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
    

    上面的脚本未经测试,但这个概念应该可以工作。有很大的改进空间。

    【讨论】:

    • 其实只有一点。如果 1.txt 有: ClassName=x then ClassName=y 然后 ClassName=x 再次,批处理将只替换 2.txt 文件中的第一个 Class=x,然后移动到 Class=y。我希望它首先通过 2.txt 文件一直处理 x,然后处理 y,然后处理 z,等等……这可能吗?
    • 对不起,我说反了。如果 x 的实例出现在 2.txt 中的 y 之前 And 之后,则只有第一个 x 将更改为 ShipDummy。 2.txt 将有多个 x 实例。 1.txt 将只有 1 个 x 实例、1 个 y 实例、1 个 x 实例等...
    • 基本上我的意思是,如何在 2.txt 中重复 ShipDummy 函数,以确保所有 Class=x 都是 Class=ShipDummy?
    猜你喜欢
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多