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

时间:2011-03-27 17:27:10

标签: windows batch-file dos

我正在寻找一个DOS批处理文件的简单示例,该文件将删除数千个txt文件的第一行并使用原始文件名保存文件。在另一个程序执行批处理之后,我必须在外部处理后的每个文件的开头添加删除的行(由“X,Y,Z”组成的文本字符串)。

2 个答案:

答案 0 :(得分:5)

您可以使用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"
)

答案 1 :(得分:0)

这是我的版本。

@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"
)