【问题标题】:How to use a batch file to delete a line of text in a bunch of text files?如何使用批处理文件删除一堆文本文件中的一行文本?
【发布时间】:2013-10-17 10:53:34
【问题描述】:

我的 D 盘中有一堆 txt 文件,它们随机放置在不同的位置。一些文件还包含符号。我想要一个批处理文件,这样我就可以同时完全删除它们的特定行,而无需为每个文件一个一个地执行它,请参考一个代码,它不会在其他位置创建新的文本文件并合并更改即我不想要 input.txt 和 output.txt 的东西。我只需要在单击批处理文件后立即将原始文件替换为更改。

例如 D:\abc\1.txt D:\xyz\2.txt 等

我希望通过单击将它们的第 3 行完全删除,并且新文件必须以相同的名称保存在同一位置,即新更改的文本文件必须替换旧文本文件并删除它们各自的行。也许某种 *.txt 的东西,即我应该能够通过单个批处理文件更改驱动器中所有具有 .txt 扩展名的文件,或者在另一个驱动器中,而不是将我的批处理文件分别放入每个文件夹然后运行他们。或者,也欢迎使用 vbs 文件。

【问题讨论】:

  • 请您解释一下从两个文件中同时删除行而不是一个接一个地删除行的要求?考虑到硬盘显然必须一次执行一个操作,原因是什么以及您的确切含义是什么。另外,您愿意使用其他脚本语言吗?
  • @ChrisProsser 我只是说它应该尽可能快地执行。它没有必要在同一个实例中处理所有文件(可以对所有文件一起执行,也可以一个接一个地执行,没关系,但应该很快)。但是参考一个一个的方法,我的意思是我不想自己单独打开每个文件并删除特定的行,因为它宁愿花费很长时间并且它的种类一项繁重的任务,这就是我要求批处理文件或 vbs 语言的原因。就语言而言,我对这两种语言比其他任何语言都更舒服。

标签: windows batch-file cmd text-files


【解决方案1】:

这使用了一个名为 findrepl.bat 的辅助批处理文件,来自 - http://www.dostips.com/forum/viewtopic.php?f=3&t=4697

findrepl.bat 与下面的批处理文件放在同一文件夹中。

它将搜索驱动器 d: 上的每个 *.txt 文件并删除第 3 行。

@echo off
for /r "d:\" %%a in (*.txt) do (
   echo processing "%%a"
   type "%%a"|findrepl /v /o:3:3 >"%%a.tmp"
   move "%%a.tmp" "%%a" >nul
)
pause

【讨论】:

  • 这完全取决于您需要做什么。你能描述一下任务吗? /o:3:3 表示起始行和结束行。因此,要删除从第 10 行到第 20 行的所有行,您将使用 /o:10:20
  • 确实非常好......用你的方法让它工作,但我有一些问题,例如它需要更多的时间和内存,而不是仅仅删除第三行它会清除整个 txt file.i 创建了两个批处理文件,一个是上面的代码,另一个包含您提到的 findrepl 代码。我做错了什么还是可以进一步增强代码以简化流程并更准确?你是如何包含暂停命令的?它的目的是什么?
  • findrepl 你的意思是上面提到的页面上的大代码.....对???我复制了那个代码。现在这两个文件使文本文件分成几部分。例如我'我向您发送我用于测试目的的文本文件。尝试使用您的代码删除其整个第 3 行并告诉我。
  • 这两个文件使我的测试文件分裂成碎片,它们并没有专门针对第 3 行。
  • cometdocs.com/download/801366-55526.txt 看看他的文件,让我知道你对删除第 3 行的想法。这是我目前能找到的最艰难的测试文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多