用 Windows 命令行连接文本文件,删除前导行

我需要连接一些相对较大的文本文件,并希望通过命令行进行此操作。不幸的是,我只有 Windows,无法安装新软件。

type file1.txt file2.txt > out.txt

允许我几乎得到我想要的,但是我不希望 file2.txt 的第一行包含在 out.txt 中。

我已经注意到 more+n选项来指定起始行,但是我还没有设法组合这些选项来得到我想要的结果。我知道这在 Windows 中可能是不可能的,我总是可以手动编辑 out.txt 来去掉这一行,但是有没有一种从命令行进行编辑的简单方法呢?

330485 次浏览
more +2 file2.txt > temp
type temp file1.txt > out.txt

或者你可以使用 copy。请参阅 copy /?了解更多。

copy /b temp+file1.txt  out.txt

使用 FOR 命令逐行回显一个文件,并使用“跳过”选项来错过一些起始行..。

FOR /F "skip=1" %i in (file2.txt) do @echo %i

您可以重定向批处理文件的输出,包含类似..。

FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i

注意在批处理文件中使用 FOR 变量时的双重% 。

我知道你说过你不能安装任何软件,但我不确定这个限制有多严格。无论如何,我遇到了同样的问题(试图用大概相同的标题连接两个文件) ,我认为我可以为其他到达这个页面的人提供一个替代的答案,因为它对我来说非常有用。

在 Windows 中尝试了一大堆命令之后,我感到非常沮丧,并且尝试了各种图形化编辑器,这些编辑器承诺能够打开大文件,但是后来不能,我最终回到了我的 Linux 根源,打开了 Cygwin 提示符。两个命令:

cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv

对于 file1.csv800MB 和 file2.csv400MB,这两个命令在我的机器上只用了不到5秒钟。还是在 Cygwin 的提示下。我认为 Linux 命令在 Cygwin 应该是比较慢的,但是这种方法比我能找到的任何 windows 方法都要简单得多。

我用这个,它对我很有效:

TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv

当然,在每次跑步之前,你必须做 DELETE C:\Folder\ConcatenatedFile.csv

唯一的问题是,如果所有文件都有标题,那么它将在所有文件中重复出现。

我没有足够的信誉点来评论使用 *.csv >> ConcatenatedFile.csv的建议,但是我可以添加一个警告:

如果在用于连接的同一目录中创建 ConcatenatedFile.csv文件,它将被添加到自身。

如果不是我的名气太小,我会把这个发给 Ghostdog74。

more +2 file2.txt > temp
这段代码实际上会忽略文件的第1行和第2行。OP 希望保留第一个文件中的所有行(以维护头行) ,然后排除第二个文件中的第一行(可能是相同的头行) ,因此为了只排除头行 OP 应该使用 more +1

type temp file1.txt > out.txt

不清楚这段代码的顺序是什么。是将 temp附加到 file1.txt(按需要) ,还是将 file1.txt附加到 temp(不需要,因为头行将被隐藏在结果文件的中间)。

另外,对于大文件(例如300MB) ,这些操作需要很长的时间

more +2 file1.txt > type > out.txt && type file2.txt > out.txt

下面是如何做到这一点:

(type file1.txt && more +1 file2.txt) > out.txt

在 Powershell 中:

Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt

这将 Test.txt与头文件一起,附加 Test1.txtTest2.txt,并在分别从第二个和第三个文件中剥离头文件后将结果写入 Testresult.txt文件:

type C:\Test.txt > C:\Testresult.txt && more +1 C:\Test1.txt >> C:\Testresult.txt && more +1 C:\Test2.txt >> C:\Testresult.txt

你也可以试试这个

type file2.txt >> file1.txt

它将在 file1.txt 的末尾追加 file2.txt 的内容

如果需要原始文件1.txt,请事先备份

type file1.txt > out.txt
type file2.txt >> out.txt

如果希望在第一个文件的末尾使用换行符,可以在附加之前尝试以下命令。

type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt

copy的帮助说明可以使用通配符将多个文件连接到一个文件中。

例如,复制所有。当前文件夹中以“ abc”开头的 txt 文件放入一个名为 xyz.txt 的文件中:

copy abc*.txt xyz.txt