【问题标题】:Combine multiple text files and produce a new single text file using PowerShell?使用 PowerShell 合并多个文本文件并生成一个新的单个文本文件?
【发布时间】:2016-10-27 13:53:28
【问题描述】:

我在一个目录中有多个文本文件。如何将所有文件合并为一个并生成一个新的单个文本文件保存在桌面上?

【问题讨论】:

  • 使用 powershell 有几种不同的方法可以做到这一点,但是如果您可以让我们知道您已经尝试过什么以及遇到了什么问题,那将会很有帮助,那么我们可以帮助您工作通过这些并解释将来如何处理类似的问题,而不仅仅是为您编写代码。
  • 目录 C:\folder* -include *.txt -rec |气相色谱 |输出文件 C:\result.txt ..
  • @MikeGaruccio 所有文本文件都在目录内的 dfs 路径中。我希望将所有这些文件组合起来并将结果保存在我的桌面中
  • @MikeGaruccio 也可以在每个新文本文件之间使用分隔符
  • 您粘贴的代码看起来正确,并在我的机器上成功运行以合并文本文件。就我个人而言,我会用实际的 cmdlet get-childitem 替换别名目录,但这是风格。当您尝试运行它时,您是否收到任何特定的错误消息?一旦我们弄清楚基本脚本出了什么问题,我们就可以考虑添加一个分隔符。

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0


【解决方案1】:

这是一个解决方案,它将生成一个组合文件,其中一个空白行分隔每个文件的内容。如果您愿意,可以在 foreach-object 循环中的 "" 中包含您想要的任何字符。

Get-ChildItem d:\scripts -include *.txt -rec | ForEach-Object {gc $_; ""} | out-file d:\scripts\test.txt

而且 FTR 无需担心将您正在创建的文件放在您正在扫描的同一目录中。它是在 Get-ChildItem cmdlet 在管道中运行之后创建的,因此不会产生问题(尽管如果您不删除它,它的内容将包含在脚本的后续运行中)。

【讨论】:

  • 谢谢,这可以包含子目录还是只包含主目录,以任何方式包含主目录和子目录中的所有内容
  • 该代码使用-recurse 开关,因此它将从目录及其下的所有子目录中收集文本文件,如果您删除-recurse,它将仅从第一级收集文本文件目录。
  • Mike 大帮助.. 谢谢最后一个问题.. 而不是 Get-ChildItem 即使我们直接指定目录也不会影响任何东西..
  • 这个命令输出是一个无限循环并且输出文件越来越大。我唯一改变的是 txt 到 sql。
  • @LuisGouveia 确保不要将输出文件放在同一目录中。它将继续阅读它导致无限循环
【解决方案2】:
$directory = "C:\tmp"

$resultFile = $env:USERPROFILE + "\Desktop\result.txt"

Get-ChildItem -Path $directory -Include *.txt -Recurse | Get-Content | Out-File -FilePath $resultFile -NoClobber

不要把结果和文本文件放在同一个目录,否则你会得到不好的结果:)

【讨论】:

  • 合并后的每个新文本文件的分隔符如何
【解决方案3】:

试试这个:

 $yourdir = "c:\temp\"
 Get-ChildItem $yourdir -File -Filter *.txt | gc | out-file -FilePath ([Environment]::GetFolderPath("Desktop") + "\totalresult.txt")

如果你想为标题添加文件名,你可以这样做:

$yourdir="c:\temp\"
$destfile= ([Environment]::GetFolderPath("Desktop") + "\totalresult.txt")
Get-ChildItem $yourdir -File -Filter *.txt | %{"________________________" |out-file  $destfile -Append; $_.Name  | Out-File  $destfile -Append; gc $_.FullName | Out-File  $destfile -Append}

【讨论】:

  • 假设我的文本文件名是 a.txt b.txt c.txt d.txt 在合并 e.txt 中的所有内容时,我可以获得一个动态分隔符,即文本文件名本身.. 例如:a .text- 内容 b.text - 内容 c.text - 内容。对于每个分隔符,我都希望拥有文本文件本身的名称,希望你理解我的查询
  • 感谢大帮助 :)
  • 你能按上箭头吗?)
  • 感谢您的反馈!声望不足 15 人的投票会被记录下来,但不要改变公开的投票。完成
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2013-07-18
  • 1970-01-01
  • 2017-08-17
相关资源
最近更新 更多