我有一个对象集合(成千上万),每个对象都包含一个包含文件路径作为字符串的属性。这些在下面的代码中命名为$ 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。
答案 0 :(得分:0)
您可以在使用|
加入路径集合后使用正则表达式匹配进行比较。
$RegEx = (@("\\root\folder1","\\root\folder2","\\root\folder3") | ForEach-Object {[regex]::Escape($_)}) -join '|'
$subfolders = $fileObjects | Where-Object {$_.FolderPath -match $RegEx}