复制内容形式从目录中的所有文本文件,并写入到一个文本文件中
下面的代码将文本文件中的内容复制到目录中的文件,但它会覆盖现有文件的内容:复制内容形式从目录中的所有文本文件,并写入到一个文本文件中
Get-ChildItem $FilePath -Recurse -Include *.docx,*folder\abc\source.txt | ForEach-Object {Copy-Item $_.FullName -Destination C:\destination.txt}
我想将所有内容附加到单个文件。
使用Get-Content
和Add-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
过滤器。
@Sursh请注意培根对你的问题的评论。虽然Ansgar的答案是(一如既往),但是由于带有.docx(或其他非txt文件)的Get-Content/Add-Content很可能会产生不利的结果,因此它是真正的理论,并不一定是实践。 – TheMadTechnician 2014-11-04 19:16:58
谢谢,我会测试,让你知道 – Sursh 2014-11-04 20:41:17
我测试过的脚本正在执行,即使* .docx,*文件夹\ abc \ source.txt doesnt存在它写入文件 – Sursh 2014-11-05 00:24:58
你正在做的是复制你的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
请注意,**不能将* .docx文件连接在一起**。此方法适用于纯文本文件,但对Office,PDF或其他文件无效。 – 2014-11-04 19:09:03