我在网上看到的一切都说import-csv会创建一个数组,如果是这样的话,那么这两个命令会创建两个独立的数组:
$file1 = @(import-csv -Path "C:\FileInfo\Fileslocal.csv")
$file2 = @(import-csv -Path "C:\FileInfo\Files.csv")
这两个命令也创建了数组:
$a = @("Scott","Angela","Mike")
$B = @("Scott","Robert","Angela")
但是当我这样做时
$b | Where {$a -NotContains $_}
我将Robert
作为回报
但是当我做的时候
$file2 | Where {$file1 -NotContains $_}
我什么都没收到。
答案 0 :(得分:1)
您不会显示文件的内容,但根据评论和假设,我们会说它们包含带有列标题的文件名列表。那么看看你要比较的两种数据类型..
我们已经定义了您的字符串数组$a
和$b
。然后,您$file1
和$file1
Import-CSV。查看MSDN Import-CSV
...
从CSV文件中的项目创建类似于表格的自定义对象。
虽然它们共享相似的属性,但它们实际上是不同类型的对象。如果您使用$file1
查看Get-Member
的成员,您会看到每列的NoteProperty。
现在来看你的代码
$file2 | Where {$file1 -NotContains $_}
我本以为你会得到的东西,尽管不是你想要的。如果要比较CSV对象中的列,则应在逻辑中使用列名。
$file2 | Where {$file1.Name -NotContains $_.Name}
这将返回所有"行"在$file2
中,$ file2中的name
不在name
$file1
列表中
这种类型的比较逻辑没有太多细节,还有其他选择。
Get-Content
阅读它们,如果它的标题为Select-Object -Skip 1
,则跳过第一行Compare-Object
。虽然它被认为是一种性能消耗,但它对于较小的数据集应该可以正常工作。