将多个文件中的文本合并为一个文件

时间:2017-04-07 21:02:01

标签: powershell

我正在尝试创建一个包含连接的源代码文件内容的文本文件。我提出了以下简明的代码:

Get-ChildItem  -Recurse MySourcePath -Include "*.htm", "*.cs" | Foreach-Object 
{Get-Content $_.FullName | Add-Content MyFile.txt}

问题是,在多个文件(数百或数千)之后,我开始出现以下错误:

  

添加内容:该进程无法访问文件' MyFile.txt'因为它正被另一个进程使用。

这似乎是并发问题,我认为它与流水线机制有关,但使用foreach并没有解决问题。

PowerShell保护我的文件免受多次写入的正确方法是什么?有没有办法继续使用管道?

3 个答案:

答案 0 :(得分:1)

正如here所述,您的问题是添加内容,只需执行此操作

Get-ChildItem $MySourcePath -Recurse -Include "*.htm", "*.cs" | get-content |  Out-File -Append MyFile.txt



#short version
gci -file $MySourcePath -Recurse -Include "*.htm", "*.cs" | gc >>  MyFile2.txt

答案 1 :(得分:0)

你可以将Get-ChildItem传递给Out-File来组合文件,它只需要一次写操作:

Get-ChildItem MySourcePath -Include "*.htm", "*.cs" -Recurse | Out-File MyFile.txt

答案 2 :(得分:0)

我知道这是一个旧线程,但是我发现了以下内容: https://blogs.msdn.microsoft.com/rob/2012/11/21/combining-files-in-powershell/

实际上将所有htm文件的内容组合到单个 MyFile.txt 中的行看起来像这样:

Get-ChildItem -recurse -include "*.htm" | % { Get-Content $_ -ReadCount 0 | Add-Content MyFile.txt }