我正在苦苦寻找一个简单的DOS批处理文件示例,它可以删除数千个txt文件的第一行,并将该文件保存为原始文件名。在另一个程序执行批处理过程后,我必须将被删除的行(一个由“X,Y,Z”组成的文本字符串)添加到每个文件的开头以进行外部处理。
我正在苦苦寻找一个简单的DOS批处理文件示例,它可以删除数千个txt文件的第一行,并将该文件保存为原始文件名。在另一个程序执行批处理过程后,我必须将被删除的行(一个由“X,Y,Z”组成的文本字符串)添加到每个文件的开头以进行外部处理。
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"
)
more
)在我尝试运行它时什么也没做。你有任何想法吗?基本上,我唯一改变的是将第一行中的.txt
替换为.csv
,因为我想删除每个csv文件的第一行。然而,什么也没发生(如果我查看文件的保存时间,这并没有改变,所以我猜它们没有被打开)。如果你有任何想法,那就太好了。 - Christoph_J这是我的版本。
@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"
)
for
可以很好地迭代文件列表,而无需解析dir
的输出(在某些情况下,具有Unicode文件名时可能会失败)。此外,您还错过了删除第一行的步骤。 - Joey