批量删除文本文件中的一行?

我拉我的头发find一个DOSbatch file,将删除几千个txt文件的第一行的简单示例,并保存与原始文件名的文件。 在由另一个程序执行的批处理之后,然后我必须在每个文件的开始处添加被删除的行(由“X,Y,Z”组成的文本串)在外部处理之后。

Solutions Collecting From Web of "批量删除文本文件中的一行?"

您可以使用more +1来跳过文件的第一行。 然后,您可以将其转换为临时文件(不能编辑文本文件):

 for %x in (*.txt) do (more +1 "%x">tmp & move /y tmp "%x") 

之后,您可以使用类似的技术重新添加第一行:

 for %x in (*.txt) do ((echo X,Y,Z& type "%x")>tmp & move /y tmp "%x") 

如果您在批处理文件中使用这些文件,请记住加倍显示%符号:

 @echo off for %%x in (*.txt) do ( more +1 "%%x" >tmp move /y tmp "%%x" ) rem Run your utility here for %%x in (*.txt) do ( echo X,Y,Z>tmp type "%%x" >>tmp move /y tmp "%%x" ) 

好吧,显然more不适用于太大的文件,这让我感到惊讶。 作为一种替代方案,如果你的文件不包含空白行(尽管它看起来像我收集的CSV)

 for %%x in (*.txt) do ( for /f "skip=1 delims=" %%l in ("%%x") do (>>tmp echo.%%l) move /y tmp "%%x" ) 

这是我的版本。

 @echo off for /f "usebackq delims=" %%f in (`dir /b *.txt`) do ( echo X, Y, Z>"tmp.txt" type "%%f" >> tmp.txt move tmp.txt "%%f" )