【发布时间】:2021-01-14 16:09:24
【问题描述】:
我试图比较两个数组:一个包含用户名列表(动态,有时更多用户名,有时更少),另一个包含文件名列表(也是动态的)。每个文件名都包含用户名和其他文本,例如“用户名报告 [日期].xlsx”。目标是匹配数组 A 和数组 B 之间的元素。
数组 A 只是用户名。 包含在 $Username 中的数组 A 的输出只是: 人A 人B 人C 等等……
Array B 包含文件路径,但我可以将其缩小为像 $ArrayB.Name 这样的文件名(完整路径是 $ArrayB.FullName)。 Array B 的命名格式为“用户名报告[日期].xlsx”。
$LatestFiles.Name(文件名)中包含的数组 B 的输出是: PersonA 报告 1-1-21.xlsx PersonB 报告 1-1-21.xlsx PersonC 报告 1-1-21.xlsx
匹配后,如果数组A中的元素匹配数组B中的元素,则将ArrayB.FullName附加到相应的用户名+“@domain.com”。
很遗憾,我什至无法让匹配正常工作。
我试过了:
foreach ($elem in $UserName) { if ($LatestFiles.Name -contains $elem) { "there is a match" } }
和
foreach ($elem in $UserName) {
if($LatestFiles.Name -contains $elem) {
"There is a match"
} else {
"There is no match"
}
}
还有几个不同的变体,但我无法让它们输出匹配项。感谢您提供任何帮助。
【问题讨论】:
-
$LatestFiles |Where Name -eq $elem从$LatestFiles获取相关元素 -
用它来代替我所拥有的,但不幸的是它没有用。
-
抱歉,不够清晰,您需要将它放在
foreach循环内(因为它引用$elem) -
没问题,我已经假设了很多哈哈。如果我用您的建议替换 foreach 循环中的“$LatestFiles.Name -contains $elem”,它不会输出任何内容。同样,如果我用您的建议替换整个“if 语句”,输出也是空白的。如果有关数组的信息不够清楚,我可以添加更多信息。再次感谢。
-
重新阅读帖子,然后你会想要
... |Where Name -like "${elem}*"- 这样它会测试文件名以的值$elem
标签: arrays powershell string-comparison