【问题标题】:Modify file content using batch file使用批处理文件修改文件内容
【发布时间】:2017-03-24 03:43:04
【问题描述】:

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

例如

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

仅在 MAN 末尾添加 (_V2)

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

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

【问题讨论】:

  • 没有好办法回答这个问题。我们可以告诉您如何在文件末尾或行尾添加文本,或者如何解析它并查找要替换为新文本的特定标记...但只要您不指定确切的标准,这个问题无法正确回答。
  • 嗨..只需要在描述名称中添加_V2 Description=MAN_Human 更改为Description=MAN_Human_V2 请帮助处理批处理文件。
  • 如有任何问题请告诉我。
  • 我见过这个,但它没有用。描述名称并非对所有文件都通用,因此查找和替换将不起作用。请帮帮我

标签: batch-file


【解决方案1】:

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

【讨论】:

  • 仅供参考 - 如果您对有帮助的答案进行投票,并将回答您问题的答案标记为正确,人们将来会更愿意帮助您。
  • 但我不想更改文件名
  • 没有批处理文件方法来更改文件的内容。但是,您可以一次分析一个文件的每一行,并将每一行发送到一个新文件(当您遇到所需的行时修改它)。然后,一旦您创建了修改后的文件,您就可以用修改后的文件替换原始文件。这就是上面的代码所做的......
  • 我理解,它对单个文件工作正常,但问题是我不想要一个单独的文件,也不会更改实际文件名。多文件怎么办?请建议和帮助我
  • 此外,描述名称出现在每个文件的第二行。它是固定的。
【解决方案2】:

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

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

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

【讨论】:

  • 其实这可以通过批处理文件来完成。看我的回答。
  • 谢谢 - 删除了说明仅使用批处理文件是不可能的行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多