使用PowerShell连接文件

Bal*_*tar 22 powershell powershell-3.0

我正在使用PowerShell 3.

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

file1.txt + file2.txt = file3.txt
Run Code Online (Sandbox Code Playgroud)

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

小智 38

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

Get-Content .\File?.txt | Out-File .\Combined.txt
Run Code Online (Sandbox Code Playgroud)

  • 这为我产生了一个递归文件炸弹,不要将输出文件与输入文件放在同一目录中。 (9认同)
  • 对于想知道为什么这会在 Windows 8+ 上失败的每个人,请改用它:`Get-Content .\*.txt | 输出文件 .\Combined.txt` (2认同)

Kei*_*ill 20

我会走这条路:

Get-Content file1.txt, file2.txt | Set-Content file3.txt
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*ren 8

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

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

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

Get-Content -Raw file1, file2 | Set-Content -NoNewline destination
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

Get-Content file1 -Encoding Byte -Raw | Set-Content destination -Encoding Byte
Get-Content file2 -Encoding Byte -Raw | Add-Content destination -Encoding Byte
Run Code Online (Sandbox Code Playgroud)

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

copy file1 /b + file2 /b + file3 /b + ... destinationfile
Run Code Online (Sandbox Code Playgroud)

您不得覆盖任何部分,即使用任何部分作为目标。目标文件必须与任何部分不同。否则,您可能会感到惊讶,并且必须找到该文件部分的备份副本。


Dan*_*man 5

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

Get-ChildItem -Recurse *.cs | ForEach-Object { Get-Content $_ } | Out-File -Path .\all.txt
Run Code Online (Sandbox Code Playgroud)