【发布时间】:2010-10-16 21:07:39
【问题描述】:
我有两个文本文件。我想将 file1.txt 的四行内容附加到 file2.txt 的前四行。这必须覆盖 file2.txt 前四行的所有记录,但保留原始内容的其余部分(其他行)。
如何使用批处理或 Windows 提示符来做到这一点?
【问题讨论】:
标签: append
我有两个文本文件。我想将 file1.txt 的四行内容附加到 file2.txt 的前四行。这必须覆盖 file2.txt 前四行的所有记录,但保留原始内容的其余部分(其他行)。
如何使用批处理或 Windows 提示符来做到这一点?
【问题讨论】:
标签: append
copy file1.txt temp.txt
echo. >> temp.txt
more +5 file2.txt >> temp.txt
move /y temp.txt file2.txt
EDIT:添加了“echo.>> temp.txt”指令,它应该在 temp.txt 中添加一个换行符,从而允许 file2.txt 的“干净”合并(如果 file1 .txt 不以换行符结尾)。
【讨论】:
除非两个文件开头的四行占用完全相同的空间,否则你不能不重写整个文件。
您不能在任意点向文件中插入或删除数据 - 您可以覆盖现有数据(逐字节)、截断文件或追加到末尾,但不能删除或插入到中间。
所以基本上你需要:
您可以使用来自 Unix 的 head/tail 命令相当轻松地做到这一点,如果这是一个可接受的解决方案,您可以从 Cygwin 获得。 Windows Services for Unix 的头部/尾部很可能也会起作用。
【讨论】:
如果您使用coreutils from Gnutils,您将能够使用 Cygwin 做很多事情,而无需安装 cygwin。 然后,您可以使用 head、tail 和 cat 之类的东西,它们可以让您做您想做的事情。
例如
head -n 4 file2.txt
获取file2的前四行。
从上面链接的页面中提取 zip,然后从 bin 目录中获取您需要使用的任何工具,并将它们放在路径中的目录中 - 例如对于下面你想要的 mv,head 和 tail。您可以使用内置的 DOS 移动命令,但您需要稍微更改选项。
这个问题有点不清楚,但如果您要删除 file2.txt 的前四行并将它们附加到 file1.txt,您可以执行以下操作:
head -n 4 file2.txt >> file1.txt
tail -n +5 file2.txt >> temp.txt
mv temp.txt file2.txt
【讨论】:
单独使用批处理我不确定你能做到。
您可以使用 Unix 命令 -- 并且可以在 Windows 下使用 Cygwin 轻松使用 Unix 命令。
在这种情况下你想要:
#!/bin/bash
head -n 4 file1.txt > result.txt # first 4 lines of file1
tail -n +5 file2.txt >> result.txt # append lines 5, 6, 7... of file2
mv result.txt file2.txt # replace file2.txt with the result
【讨论】:
如果你用 Windows 批处理以外的东西编写脚本,你可以做到这一点。带有windows脚本主机的vbscript或jscript应该可以做到。它们中的每一个都有一种方法可以从一个文件中获取行并覆盖另一个文件的行。
【讨论】:
您可以通过创建一个临时的第三个文件来做到这一点,从第一个文件中提取行并将它们添加到临时文件中,然后读取第二个文件,并在读取四个回车/换行对后,将其余部分写入临时文件。然后,删除第二个文件并将临时文件重命名为第二个文件名。
【讨论】: