复制内容形式从目录中的所有文本文件,并写入到一个文本文件中

问题描述:

下面的代码将文本文件中的内容复制到目录中的文件,但它会覆盖现有文件的内容:复制内容形式从目录中的所有文本文件,并写入到一个文本文件中

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

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

+1

你正在做的是复制你的get-childitem返回的文件,而不是它们的内容。使用'get-content'来获取文件的内容。我还建议您使用get-help并研究您使用的功能以及它们的功能。你可以尝试这样的'Get-ChildItem $ FilePath -Recurse -Include * .docx,* folder \ abc \ source.txt | ForEach-Object {$ _ | out-file C:\ destination.txt --append}' – Paul 2014-11-04 19:03:40

+5

请注意,**不能将* .docx文件连接在一起**。此方法适用于纯文本文件,但对Office,PDF或其他文件无效。 – 2014-11-04 19:09:03

使用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过滤器。

+0

@Sursh请注意培根对你的问题的评论。虽然Ansgar的答案是(一如既往),但是由于带有.docx(或其他非txt文件)的Get-Content/Add-Content很可能会产生不利的结果,因此它是真正的理论,并不一定是实践。 – TheMadTechnician 2014-11-04 19:16:58

+0

谢谢,我会测试,让你知道 – Sursh 2014-11-04 20:41:17

+0

我测试过的脚本正在执行,即使* .docx,*文件夹\ abc \ source.txt doesnt存在它写入文件 – Sursh 2014-11-05 00:24:58