删除与其他数组匹配的数组内容

时间:2016-08-04 14:29:45

标签: powershell

我的脚本的目标是复制一些文件。我导入一个配置文件,它给我一个排除的路径和文件名(排除不应该被复制)。

现在,我有2个数组,一个用于文件夹,一个用于排除,我想删除array1中包含array2排除文件的所有行。

我尝试了类似的东西,但它没有奏效......

$arrFolder = $arrFolder - $arrExcludes

$arrFolder | $_ -replace "$arrExcludes",""
我正在寻找没有好办法的休息室。有人可以帮助我吗?

谢谢你&问候,mischa

2 个答案:

答案 0 :(得分:2)

有许多经典和琐碎的基于循环的解决方案,例如:

$arrFolder = $arrFolder | ?{ $_ -notin $arrExcludes }

通常,这是你想要的,除非数组非常大或你做了很多迭代。
在这种情况下,使用在现代PowerShell 4.0 +中运行的.NET HashSet类是不同的:

$arrHash = [Collections.Generic.HashSet[string]]$arrFolder
$arrHash.ExceptWith([Collections.Generic.HashSet[string]]$arrExcludes)
$arrFolder = @($arrHash)

答案 1 :(得分:0)

您也可以使用LINQ(PS 3.0 +)以外的其他内容:

$arr1 = "Folder1", "Folder2", "Folder3", "Folder4"
$arr2 = "Folder2", "Folder3"

[System.Linq.Enumerable]::Except([string[]]$arr1, [string[]]$arr2)