我正在处理两个数据集。一个用来过滤另一个。基本数据集是使用如下命名方案的一组文件夹:
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
并根据数组过滤数组?
编辑: 要澄清。
我有一个数字列表。我有一堆文件夹。每个文件夹均以数字开头。有些共享相同的号码。我想知道哪些文件夹与列表匹配。
答案 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}