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