使用PowerShell连接文件

时间:2013-06-06 00:57:45

标签: powershell powershell-v3.0

我正在使用PowerShell 3。

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

file1.txt + file2.txt = file3.txt

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

6 个答案:

答案 0 :(得分:34)

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

Get-Content .\File?.txt | Out-File .\Combined.txt

答案 1 :(得分:19)

我会走这条路:

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

如果您需要除了ASCII之外的其他内容(Set-Content的默认设置),请在Set-Content上使用-Encoding参数。

答案 2 :(得分:0)

基于@Keith回答的概括:

gc <some regex expression> | sc output

答案 3 :(得分:0)

如果您需要更大的灵活性,可以使用类似的

Get-ChildItem -Recurse *.cs | ForEach-Object { Get-Content $_ } | Out-File -Path .\all.txt

答案 4 :(得分:0)

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

  • 如果没有 -Raw,它会“修复”(即中断,双关语)换行符,或者 Powershell 认为的换行符。
  • 使用 -Raw,您会在 每个文件部分的末尾,添加在管道的末尾。在较新的 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

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

答案 5 :(得分: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