28

我正在使用 PowerShell 3。

连接文件的最佳做法是什么?

file1.txt + file2.txt = file3.txt

PowerShell 是否提供了直接执行此操作的工具?还是我需要将每个文件的内容加载到局部变量中?

4

8 回答 8

49

如果所有文件都存在于同一目录中并且可以通过简单的模式匹配,则以下代码会将所有文件合并为一个。

Get-Content .\File?.txt | Out-File .\Combined.txt
于 2013-06-06T04:39:56.173 回答
30

I would go this route:

Get-Content file1.txt, file2.txt | Set-Content file3.txt

Use the -Encoding parameter on Set-Content if you need something other than ASCII which is the default for Set-Content.

于 2013-06-06T04:37:03.880 回答
7

如果你需要更多的灵活性,你可以使用类似的东西

Get-ChildItem -Recurse *.cs | ForEach-Object { Get-Content $_ } | Out-File -Path .\all.txt
于 2019-08-06T16:00:02.127 回答
4

警告:使用简单的连接Get-Content(无论是否使用-Raw标志)适用于文本文件;Powershell 对此非常有帮助:

  • 如果没有-Raw,它会“修复”(即中断,双关语)换行符,或者 Powershell 认为的换行符。
  • 使用-Raw,您会在每个文件部分的末尾获得一个终止行结尾(通常为 CR+LF),该结尾添加在管道的末尾。在较新的 Powershell 的 Set-Content 中有一个选项。

要连接二进制文件(即,由于某种原因被拆分并需要再次放在一起的任意文件),请使用以下任一方法:

Get-Content -Raw file1, file2 | Set-Content -NoNewline destination

或类似的东西:

Get-Content file1 -Encoding Byte -Raw | Set-Content destination -Encoding Byte
Get-Content file2 -Encoding Byte -Raw | Add-Content destination -Encoding Byte

另一种方法是使用 CMD shell 并使用

copy file1 /b + file2 /b + file3 /b + ... destinationfile

您不得覆盖任何部分,即使用任何部分作为目标。目标文件必须不同于任何部分。否则你会大吃一惊,必须找到文件部分的备份副本。

于 2021-01-18T11:58:36.643 回答
0

如果您想确保以特定顺序完成连接,请使用Sort-Object -Property <Some Name>参数。例如,根据升序排列的名称进行连接:

Get-ChildItem -Path ./* -Include *.txt -Exclude output.txt | Sort-Object -Property Name | ForEach-Object { Get-Content $_ } | Out-File output.txt

重要提示: -Exclude并且Out-File 必须包含相同的值,否则,它将递归地继续添加,output.txt直到您的磁盘已满。

请注意,您必须*在参数末尾附加 a ,-Path因为您正在使用-Include,如Get-ChildItem文档中所述。

于 2022-03-05T19:25:49.240 回答
0

基于@Keith 答案的概括:

gc <some regex expression> | sc output

于 2016-12-26T22:52:02.313 回答
0
gc file1.txt, file2.txt > output.txt

我认为这是尽可能短的。

于 2022-02-06T07:33:25.030 回答
0

这是一个有趣的示例,说明如何基于 Powershell 7 制作 zip-in-image 文件

Get-Content -AsByteStream file1.png, file2.7z | Set-Content -AsByteStream file3.png
Get-Content -AsByteStream file1.png, file2.7z | Add-Content -AsByteStream file3.png
于 2021-07-16T14:39:30.077 回答