使用批处理文件修改文件内容

时间:2013-06-28 20:04:43

标签: batch-file

我需要创建一个批处理文件,使用它可以修改文件的内容。

例如

Testing.txt文件包含一行 描述= MAN_Human 改成 描述= MAN_Human_V2

仅在MAN的末尾添加(_V2)

因此,当我们打开文件时,我们只有MAN的描述名称MAN_Human_V2。

我有多个文件要处理。请帮忙。

2 个答案:

答案 0 :(得分:2)

您可以使用for循环遍历文件的每一行,当您找到带有“描述”的行时,将'_V2'附加到输出。

@echo off

for %%f in (*.txt) do (
  for /f "tokens=1* delims=:" %%g in ('type "%%f" ^| findstr /n /v "BoGuSsTrInG"') do (
    if "%%hx"=="x" (
      echo.>>"%%~nf.newtxt"
    ) else (
      for /f "tokens=1* delims==" %%i in ('echo.%%h') do (
        if "%%i"=="Description" (
          echo.%%i=%%j_V2>>"%%~nf.newtxt"
        ) else (
          if "%%jx"=="x" (
            echo.%%i>>"%%~nf.newtxt"
          ) else (
            echo.%%i=%%j>>"%%~nf.newtxt"
          )
        )
      )
    )
  )
)

ren *.txt *.oldtxt
ren *.newtxt *.txt

当然,您必须在处理test.txt文件时将内容输出到新文件。然后用新创建的文件替换原始文件......

编辑#1

在将任何文件重命名为原始名称之前,必须将TXT文件的内容完全复制到新文件中。这是因为for循环会在修改它们之后再次修改它们,如果您立即重命名它们中的一些将会多次附加_V2

我最后没有删除.oldtxt文件,因为在您知道该过程有效之前,不应该销毁原始文件!

编辑#2

我发现有一种解决方法可以保留空白行。解决方法将文本文件的内容传递给findstr,搜索所有不包含BoGuSsTrInG的行。输出包括行号(使其打印空行的唯一方法)。行号有一个尾随冒号(:),因此我们可以将输出分成不同的变量来分割冒号上的内容。 tokens=1*将行号拆分为%%g变量,行的结果位于%%h变量中。我们可以测试%%h以查看它是否为空,并在新文件中添加一个空行。否则,我们会像以前一样处理%%h

答案 1 :(得分:1)

您可以下载sed(unix实用程序 - Google sed windows

sed -i 's/Description=MAN_Human/Description=MAN_Human_V2/' test.txt

-i表示就地,即将结果写回同一文件(而不是在屏幕上显示)。第二个参数表示s ubstitute ... to ...,其余的是(文件列表)要执行此操作的文件。 Google man sed了解更多信息