PowerShell脚本优化:对比原始文件与最近两个自动生成CSV文件
优化后的PowerShell脚本实现多文件对比
需求说明
对比原始文件vdsinfo_original.csv与最近生成的两个按vdsinfo_yyMMdd_hh-mm-ss.csv格式命名的CSV文件,检测内容差异并输出到Changes.csv。
优化后的脚本
# 定义路径和输出文件 $outputFile = 'E:\TEMP\Changes.csv' $reportsPath = 'E:\TEMP\reports' $originalFile = Join-Path -Path $reportsPath -ChildPath 'vdsinfo_original.csv' # 检查原始文件是否存在 if (-not (Test-Path -Path $originalFile)) { Write-Host "原始文件 $originalFile 不存在!" -ForegroundColor White -BackgroundColor Red exit } # 获取最近生成的两个符合命名规则的CSV文件(排除原始文件) $recentFiles = Get-ChildItem -Path $reportsPath -Filter 'vdsinfo_*.csv' | Where-Object { $_.Name -ne 'vdsinfo_original.csv' } | Sort-Object LastWriteTime -Descending | Select-Object -First 2 # 检查是否获取到至少两个文件 if ($recentFiles.Count -lt 2) { Write-Host "未找到足够的最近生成文件,当前仅找到 $($recentFiles.Count) 个符合要求的文件" -ForegroundColor White -BackgroundColor Red exit } # 初始化结果数组 $allChanges = @() # 遍历最近的两个文件,分别与原始文件对比 foreach ($file in $recentFiles) { Write-Host "正在对比原始文件与 $($file.Name)..." -ForegroundColor Cyan # 读取文件内容(按行对比,若CSV有表头可改用Import-Csv按对象对比) $originalContent = Get-Content -Path $originalFile $currentContent = Get-Content -Path $file.FullName # 执行对比 $diff = Compare-Object -ReferenceObject $originalContent -DifferenceObject $currentContent -CaseSensitive # 整理对比结果,添加文件名标识 if ($diff) { $formattedDiff = $diff | Select-Object @{Name='对比文件'; Expression={$file.Name}}, InputObject, SideIndicator $allChanges += $formattedDiff } else { $allChanges += [PSCustomObject]@{ '对比文件' = $file.Name 'InputObject' = '无内容差异' 'SideIndicator' = '' } } } # 将结果输出到CSV文件 $allChanges | Export-Csv -Path $outputFile -NoTypeInformation -Encoding UTF8 Write-Host "对比完成,结果已保存到 $outputFile" -ForegroundColor Green
脚本说明
- 路径统一管理:集中定义所有路径,后续修改更便捷
- 前置检查:先确认原始文件、目标文件的存在性,避免执行过程中报错
- 精准筛选文件:通过文件名规则过滤+修改时间排序,准确获取最近生成的两个文件
- 内容对比逻辑:
- 默认按行对比,适合无复杂结构的CSV文件
- 如果CSV是带表头的结构化数据,可将
Get-Content替换为Import-Csv,实现按字段精准对比
- 结果可视化:给每条对比结果添加对应文件名,清晰区分不同文件的差异
- 标准输出:用
Export-Csv生成结构化CSV结果,比Out-File更适合后续数据处理
内容的提问来源于stack exchange,提问作者SuperZee
相关产品推荐
相关产品推荐

