【问题标题】:Batch file to replace string after other string?批处理文件在其他字符串之后替换字符串?
【发布时间】:2014-05-10 04:17:47
【问题描述】:

我有这两个文件:

test.txt test1.txt

这是第一个文件的内容:

build.date=220314
build.version=1.0Rel
build.id=TestBuild1.0
build.type=DEV

这是第二个的内容:

build.date=220314
build.version=1.3
build.id=TestBuildRedDot
build.type=DEV

现在。我想要的是一个批处理文件,它更改“build.id=”之后的文本(假设我不知道它之后的内容)。有什么帮助吗?

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    如果您不关心文件中行的顺序,那么您可以使用 FINDSTR 去除旧的 build.id 行并将结果写入新文件。然后用新值追加一个新行。最后将新文件移至原名。

    @echo off
    >file.txt.new (
      findstr /vbl "build.id=" file.txt
      echo build.id=NewValue
    )
    move /y file.txt.new file.txt >nul
    

    如果要保留行顺序,则使用 FOR /F 读取每一行,将行解析为变量名称和值。然后可以使用一个简单的 IF 语句来相应地处理该行。

    @echo off
    >file.txt.new (
      for /f "tokens=1* delims==" %%A in (file.txt) do (
        if "%%A" == "build.id" (
          echo build.id=NewValue
        ) else (
          echo %%A=%%B
        )
      )
    )
    move /y file.txt.new file.txt >nul
    

    或者您可以通过使用支持正则表达式搜索和替换的实用程序来使任务变得非常简单。我写了一个我觉得非常有用的hybrid JScript/batch utility called REPL.BAT。以下是它如何用于您的简单任务。

    @echo off
    type file.txt | repl "^(build\.id=).*" "($1)NewVaue" >file.txt.new
    move /y file.txt.new file.txt >nul
    

    【讨论】:

    • 顺便说一句,如何在 bash (Linux) 脚本上执行此操作?
    • @user3479320 - 这是一个完全不同的问题,我敢肯定已经被问过并回答了很多次。查看 awk 和 sed 实用程序。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多