按字符串数组过滤对象集合

时间:2017-09-01 21:16:19

标签: powershell

我有一个对象集合(成千上万),每个对象都包含一个包含文件路径作为字符串的属性。这些在下面的代码中命名为$ fileObjects。

(i.e. 
  $fileObject.FilePath = "\\root\folder1\foldera\folderb\folderc"
  $fileObject.FilePath = "\\root\foo\bar\fldr1"
  $fileObject.FilePath = "\\bar\foo\folder3" 
). 

我还有一个小字符串集合,其中每个字符串是文件路径的起始部分

(i.e. 
  "\\root\folder1",
  "\\root\folder2",
  "\\root\folder3" etc.
) 

这些字符串在下面的代码中称为$ paths。

我想过滤所有$ fileObjects(而不是使用foreach循环),这样我只能返回文件路径以$ paths字符串集合中的一个值开头的对象。

以下代码不起作用,但这是我想要做的:

foreach($path in $paths)
{

   # Get all $fileObjects where FilePath property starts with $path
   #
       $subfolders = $fileObjects.FolderPath.StartsWith($path)

   # Now process the $subfolders
}

我没有找到一种简洁的方法来做到这一点,而不是每个$ path再次循环每个$ fileObject。

1 个答案:

答案 0 :(得分:0)

您可以在使用|加入路径集合后使用正则表达式匹配进行比较。

$RegEx = (@("\\root\folder1","\\root\folder2","\\root\folder3") | ForEach-Object {[regex]::Escape($_)}) -join '|'
$subfolders = $fileObjects | Where-Object {$_.FolderPath -match $RegEx}