【发布时间】:2019-04-18 05:18:31
【问题描述】:
我刚刚开始研究 powershell。我有两个分别包含 132 和 134 条记录的列表。它们共有 85 条记录,我想在一个单独的列表中获取 list1 中但不在 list2 中的值,比如 list_out1,而在另一个列表中的 list2 中但不在 list1 中的值是 list_out2。我终于想打印 list_out1 和 list_out2 了。我尝试按照this answer 中给出的方式进行操作,但它在尝试打印 list_out1 时给了我 list1 中的所有值。另外,我尝试使用 foreach 循环和 if 条件如下,它还给了我 list1 中的所有值以打印 list_out1。
foreach ($i in $list1)
{
if($list2 -notcontains $i) {
$i
}
}
我不知道我在哪里做错了。逻辑对我来说似乎没问题。如果我错了,请纠正我。
【问题讨论】:
-
如果逻辑是正确的,那么你的类型是错误的。它们是什么样的记录?不管是什么,看起来相同的两件事并不能作为同一件事进行比较 - 典型的 PowerShell 初学者错误是想要字符串或整数,但通过执行
get-childitem | select name或get-childitem | ft name之类的操作而不是更正确的 @ 来获取 PSCustomObjects 987654325@.. -
您的列表/记录是什么类型的?请注意,两个对象实例被视为不同,即使它们可能具有相同的属性值。
-
@TessellatingHeckler,如果这些列表中的每条记录都有细微的变化,我们应该如何处理,我的意思是,一个列表的值为“ABC”,另一个列表的值为“aB.C”。但我希望我的功能能够同时对待两者。我们如何进行数据清理并执行所需的比较?
-
或类似这样的数据 $List1 = 'Hello','World2','Today','FromList1' $List2 = 'Hello1','World','Todayi','FromList2' 比较$List1 $list2
-
@Sree 您需要非常清楚“数据清理”的含义。删除数字和标点符号很容易(
$text -replace '\W')会做到这一点。PowerShell 在进行比较时会忽略大写/小写,所以没关系。但是Today匹配Todayi的规则是什么?这已经过去了“数据清理” ” 并进入“拼写检查器”或“具有概率的字典查找”或“自然语言处理魔法”...
标签: powershell scripting powershell-3.0