如何使用Powershell将对象与数组进行比较?

时间:2018-06-22 19:23:54

标签: powershell

我正在处理两个数据集。一个用来过滤另一个。基本数据集是使用如下命名方案的一组文件夹:

003
003 rev 1
003 rev 2
004
005
etc...

第二组数字表示我要从第一组文件夹中拉出哪些文件夹。我使用

导入它们
$numSet = Import-Csv $csvLoc | Where {$_.ItemCategory -eq "CatagoryName"} | Select-Object -ExpandProperty "Folder ID"

它们看起来像这样:

C:\>$numSet
003
005

到目前为止,这正是我想要的。现在,我要做的是使用Get-ChildItem命令,导入文件夹的位置,以便我可以使用它们。

# This is about how I believe I should go about this.
$folderLocationArray = Get-ChildItem -Path $sourceDir | Where {$numSet.Contains($_.Name)}

因为我需要检查一个数组,所以显而易见的选择是-contains,除了不允许我使用通配符,而且某些文件名后面的rev #意味着这些文件不显示。这就是发生的情况:

C:\>$folderLocationArray
003
005

我也尝试过-match-like,但结果相同。脚本可以坐着并像运行时一样运行,或者返回如下所示的空白:

C:\>script.ps1 #This is set up to output $folderLocationArray

C:>

我知道基本知识是有道理的,因为我可以插入一个数字并且可以正常工作,即使使用数组作为输入,它仍然会返回文件,而不是其中包含rev #的文件。 / p>

我很茫然。如何使用Get-ChildItem并根据数组过滤数组?

编辑: 要澄清。

我有一个数字列表。我有一堆文件夹。每个文件夹均以数字开头。有些共享相同的号码。我想知道哪些文件夹与列表匹配。

2 个答案:

答案 0 :(得分:3)

这将基于$ numset数组中的项目使用过滤器

$numset = @('003', '005')

foreach ($base in $numset) {
    Get-ChildItem -Directory -Recurse -Filter $($base + "*")
}

答案 1 :(得分:3)

根据数组过滤结果

@("001","002","023","006") | foreach{Get-ChildItem -Path $path -filter "$_*" -Recurse -Directory}