我该如何处理比较对象的结果?

时间:2011-04-27 14:41:58

标签: powershell

我在张贴之前做了很多搜索而没有运气。 我们假设我要比较两个文件夹

compare-object @(gci c:\folder1) @(gci c:\folder2) 

我用sideIndicator看到了输出,但是我怎么能做像

这样的事情
if objects are equals then
  do something
else
  do something else
end if

如果我将此cmdlet传递给get-member,我会看到一个equals方法,但我不知道如何使用它,我甚至不确定它是否可以解决我的问题。是否有任何布尔属性告诉我对象是否等于? 谢谢你的时间。

修改

嗨,我的救世主。 :) 如果我明白我必须做这样的事情:

$differences = 0
$a = @(1,4,5,3)
$b = @(1,3,4)
diff $a $b -in | % {if($_.sideindicator -ne "==") {$differences+=1}}
write-host $differences

这是唯一的方法吗?

编辑2。

在我看来,如果我不使用-includeEqual,我只得到差异,所以这段代码就足够了。

$differences = 0
$a = @(1,4,5,3)
$b = @(1,3,4)
diff $a $b  | % {$differences+=1}
write-host $differences

如果对象等于,则返回0。这是解决我问题的正确方法吗?

3 个答案:

答案 0 :(得分:7)

基本上,您不需要计算差异,相反,如果只是找到'=='就足够了,您可以使用:

$a = @(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
$b = @(10, 1, 2, 3, 4, 5, 6, 7, 8, 9)
if (diff $a $b) { 
 'not equal'
} else {
 'equal'
}

工作原理:如果管道(来自diff的序列)返回0项的集合,那么在转换为[bool]时,它将转换为$false。非空集合转换为$true

答案 1 :(得分:4)

答案 2 :(得分:3)

如果你只是想要计算差异,你可以更简洁:

$a = 1..10
$b = 3..11
(diff $a $b).count