3

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

例如

Testing.txt 文件包含一行 Description=MAN_Human 更改为 Description=MAN_Human_V2

仅在 MAN 末尾添加 (_V2)

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

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

4

2 回答 2

4

您可以通过使用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像以前一样处理。

于 2013-06-28T20:54:18.953 回答
1

您可以下载sed(一个 unix 实用程序 - google sed windows

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

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

于 2013-06-28T20:13:18.957 回答