如何比较Powershell中的2个CSV文件?
一段时间以来,我一直在尝试编写powershell脚本来比较2个csv文件。在这个论坛上找到了一个脚本的草稿,但是它没有按照我想要的方式工作。我们每周都要导出SKU,我需要比较新文件中是否有任何新SKU 我试着运行这个脚本,它可以正常工作,但只适用于一小部分行。当我尝试将真实文件与5k行进行比较时,不幸失败。输出几乎有3k行,这是胡说八道,因为我们没有在一周内添加那么多行如何比较Powershell中的2个CSV文件?,powershell,Powershell,一段时间以来,我一直在尝试编写powershell脚本来比较2个csv文件。在这个论坛上找到了一个脚本的草稿,但是它没有按照我想要的方式工作。我们每周都要导出SKU,我需要比较新文件中是否有任何新SKU 我试着运行这个脚本,它可以正常工作,但只适用于一小部分行。当我尝试将真实文件与5k行进行比较时,不幸失败。输出几乎有3k行,这是胡说八道,因为我们没有在一周内添加那么多行 Clear-Host $csv1 = Import-Csv "SKU_export_2019-04-01.csv" # N
Clear-Host
$csv1 = Import-Csv "SKU_export_2019-04-01.csv" # NEW FILE
$csv2 = Import-Csv "SKU_export_2019-03-25.csv" # OLD FILE
$end = $csv1.Count
$count = 0
$diffobj = @()
do{
if($csv1.SKU[$count] -ne $csv2.SKU[$count]){
$diffobj += $csv1[$count]
}
$count++
}until($count -eq $end)
$diffobj | export-csv C:\xampp\htdocs\diff\difference.csv -NoTypeInformation
预期结果应该是新文件中包含所有差异的输出。为什么不使用Compare对象
$diff=Compare Object-ReferenceObject$csv1-DifferenceObject$csv2
您的脚本会比较每个订单索引的csv文件,如果订单发生更改,则会出现不匹配
正如其他人所建议的,最好使用比较对象
,并明确使用SKU
字段
要仅获取新SKU,请按SideIndicator
选择可能的重复项刚尝试执行此操作的可能重复项。这一次我只得到了60行的指示,我感谢你的帮助。非常感谢。顺便问一下,是否可以添加一个日志文件,以查看执行是否已按日期完成?我正计划将此脚本添加到自动任务计划中。您可以将日期为的计算属性添加到select@{n='NewIn';e={$MondayThisWeek}
## Q:\Test\2019\04\04\SO_55515891.ps1
$MondayThisWeek = (Get-Date).Date.AddDays(-([int](Get-date).DayOfWeek)+1)
$MondayPrevWeek = $MondayThisWeek.AddDays(-7)
Clear-Host
$SKUthis = Import-Csv ("SKU_export_{0:yyyy\-MM\-dd}.csv" -f $MondayThisWeek) # NEW FILE
$SKUprev = Import-Csv ("SKU_export_{0:yyyy\-MM\-dd}.csv" -f $MondayPrevWeek) # OLD FILE
$SKUNew = Compare-Object -Ref $SKUthis -Diff $SKUprev -Property SKU -PassThru |
Where-Object SideIndicator -eq '<=' |
Select-Object -Property * -ExcludeProperty SideIndicator
$SKUNew | Out-Gridview
$SKUNew | Export-Csv 'C:\xampp\htdocs\diff\difference.csv' -NoTypeInformation