2017-04-07 88 views
0

我试图创建一个包含我的源代码文件连接的内容的文本文件。我想出了以下简洁的代码:将多个文件中的文本合并到一个文件中

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

的问题是,经过多个文件(数百或数千),我开始得到以下错误:

Add-Content : The process cannot access the file 'MyFile.txt' because it is being used by another process.

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

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

回答

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 
+0

它做到了!我无法想象它会变得更短(更好)......你个人的偏好是什么?使用完整的cmdlet名称或快捷方式? –

+1

我首先使用cmdletname,更好的可听性;) – Esperento57

0

可以通过管道将Get-ChildItemOut-File要合并文件,它只是一个写那么操作:

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

我试过了,但它只是创建一个包含所有文件名的文本文件。我需要将所有文件内容(即源代码)连接成单个文件。你还没有回答我的问题,关于什么是我最初尝试的问题... –

相关问题