我正在尝试创建一个包含连接的源代码文件内容的文本文件。我提出了以下简明的代码:
Get-ChildItem -Recurse MySourcePath -Include "*.htm", "*.cs" | Foreach-Object
{Get-Content $_.FullName | Add-Content MyFile.txt}
问题是,在多个文件(数百或数千)之后,我开始出现以下错误:
添加内容:该进程无法访问文件' MyFile.txt'因为它正被另一个进程使用。
这似乎是并发问题,我认为它与流水线机制有关,但使用foreach
并没有解决问题。
PowerShell保护我的文件免受多次写入的正确方法是什么?有没有办法继续使用管道?
答案 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 }