我的脚本的目标是复制一些文件。我导入一个配置文件,它给我一个排除的路径和文件名(排除不应该被复制)。
现在,我有2个数组,一个用于文件夹,一个用于排除,我想删除array1中包含array2排除文件的所有行。
我尝试了类似的东西,但它没有奏效......
$arrFolder = $arrFolder - $arrExcludes
或
$arrFolder | $_ -replace "$arrExcludes",""
我正在寻找没有好办法的休息室。有人可以帮助我吗?
谢谢你&问候,mischa
答案 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)