PowerShell脚本遍历月度文件夹时仅生成最后一个CSV文件的问题求助
问题解决:为每个月度文件夹生成独立CSV文件
需求与现状
- 需求:为每个包含数据的月度文件夹生成对应名称的CSV输出文件(如
Log.Jan.csv、Log.Feb.csv) - 目录结构:
C:\Logs\15Sec\Ref.Data\Month\Log.Jan\Day.1\ ~\Month\~下包含Log.Jan至Log.Dec的文件夹; ~\Log.Jan\~下包含对应月份的30/31个Day文件夹; ~\Day.1\~下存放带数据的.log文件。 - 已实现:脚本在单个月度文件夹(如
Log.Jan)下运行时,可读取该月份所有Day文件夹的数据并写入CSV - 当前问题:脚本在
C:\Logs\15Sec\Ref.Data\Month\路径运行时,仅生成最后一个月度文件夹的CSV文件,其余月份数据被覆盖
问题原因
脚本中Export-Csv始终使用固定文件名C:\test\output.csv,而该命令默认采用覆盖模式,每轮循环都会替换掉之前的文件内容,最终仅保留最后一次循环(最后一个月度文件夹)的数据。
修正后的PowerShell脚本
$targDir = "C:\Logs\15Sec\Ref.Data\Month\"; $subDir = Get-ChildItem "$targDir" –Directory; foreach($sub in $subDir) { Get-ChildItem -Path $sub –Recurse *.log | Select-Object -Property @( 'FullName' @{ Name = "LineCount"; Expression = { (Get-Content -Path $_.FullName | Select-Object -Skip 8 | Measure-Object).Count }} ) | Export-Csv "C:\test\$($sub.Name).csv" -NoTypeInformation }
关键改动说明
- 将固定输出文件名
output.csv改为动态文件名$($sub.Name).csv,直接复用月度文件夹的名称作为CSV文件名,确保每个月份生成独立的输出文件 - 保留原有核心逻辑:遍历所有月度文件夹、递归读取.log文件、跳过前8行统计有效行数
内容的提问来源于stack exchange,提问作者Hawfinch Taylor
相关产品推荐
相关产品推荐

