如何比较Powershell中的2个CSV文件?

如何比较Powershell中的2个CSV文件?,powershell,Powershell,一段时间以来,我一直在尝试编写powershell脚本来比较2个csv文件。在这个论坛上找到了一个脚本的草稿,但是它没有按照我想要的方式工作。我们每周都要导出SKU,我需要比较新文件中是否有任何新SKU 我试着运行这个脚本,它可以正常工作,但只适用于一小部分行。当我尝试将真实文件与5k行进行比较时,不幸失败。输出几乎有3k行,这是胡说八道,因为我们没有在一周内添加那么多行 Clear-Host $csv1 = Import-Csv "SKU_export_2019-04-01.csv" # N

一段时间以来,我一直在尝试编写powershell脚本来比较2个csv文件。在这个论坛上找到了一个脚本的草稿,但是它没有按照我想要的方式工作。我们每周都要导出SKU,我需要比较新文件中是否有任何新SKU

我试着运行这个脚本,它可以正常工作,但只适用于一小部分行。当我尝试将真实文件与5k行进行比较时,不幸失败。输出几乎有3k行,这是胡说八道,因为我们没有在一周内添加那么多行

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