从目录中复制内容形成所有文本文件并写入单个文本文件

时间:2014-11-04 18:41:17

标签: powershell

下面的代码会将文本文件中的内容复制到目录中的文件中,但它会覆盖现有的文件内容:

Get-ChildItem $FilePath -Recurse -Include *.docx,*folder\abc\source.txt | ForEach-Object {Copy-Item $_.FullName -Destination C:\destination.txt}

我想将所有内容附加到单个文件中。

1 个答案:

答案 0 :(得分:3)

使用Get-ContentAdd-Content代替Copy-Item

Get-ChildItem $FilePath -Recurse -Include *.txt | ? {
  $_.FullName -like '*folder\abc\source.txt'
} | Get-Content | Add-Content 'C:\destination.txt'

编辑:由于@BaconBits在您的问题的评论中正确指出,您不能简单地连接Word文档和文本文件,因为前者是二进制文件(包含一堆XML文件的zip存档,其实)。但是,如果您只想附加文档的(文本)内容,则可以执行以下操作:

$wd = New-Object -COM 'Word.Application'

Get-ChildItem $FilePath -Recurse | ? {
  $_.Extension -eq '.docx' -or
  $_.FullName -like '*folder\abc\source.txt'
} | % {
  $path = $_.FullName
  switch ($_.Extension) {
    '.docx' { 
              $doc = $wd.Documents.Open($path)
              $doc.Content.Text
              $doc.Close()
            }
    '.txt'  { Get-Content $path }
  }
} | Add-Content 'C:\destination.txt'

$wd.Quit()

注意:我无法让Get-ChildItem使用-Include参数中的部分路径,因此我将这些条件移至Where-Object过滤器。