Powershell新数组来自一个单词与另一个数组的串联

时间:2013-11-05 21:17:46

标签: powershell

在Powershell中,我正在尝试列出要从排除参数的各种命令中排除的文件列表,例如: Get-ChildItem

我正在处理的文件属于各种项目并代表顺序页码,因此对于给定的项目A,它将包含文件projA.1projA.2等。我想要能够排除一个页码(不是文件)的列表,但将该列表应用于多个项目,所以我觉得我想做的是有一个排除的页码数组,然后将其连接到项目名称并作为排除参数传递。但是,我不知道是否有一种紧凑的方式来做到这一点。这是我到目前为止所做的:

# Source and destination projects with files named projA.1, projA.2,...,projA.n, etc. 
$sourceProject = "projA"
$destProject = "projB"

# List of pages which will be excluded
$pageExclusions =@( 
"1",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"40")

$sourceExclusions = @()
foreach($i in $pageExclusions){
    $sourceExclusions = $sourceExclusions + ($sourceProject + "." +  $i)
}

# ... later I will use $sourceExclusions as an exclude filter, e.g.:
Get-ChildItem projA.* -Exclude $sourceExclusions

# and I'd need to repeat the same for projB

在我的代码示例中,是否有一个紧凑的表示法,说“sourceExclusions是一个新数组,其长度与$pageExclusions相同,但每个条目都是文件名projA来自$pageExclusions“的相应扩展名?

或者,更好的是,有没有办法将它们直接传递给排除参数,它会解释为导致$sourceExclusions

1 个答案:

答案 0 :(得分:1)

你在想这样的事吗?

Get-ChildItem -Exclude ($pageExclusions | % { "$sourceProject.$_","$destProject.$_" })

这将排除projA.1projB.1等。 如果你仍然需要它只返回文件projA.*projB.*你可以像这样扩展它

Get-ChildItem -Exclude ($pageExclusions | % { "$sourceProject.$_","$destProject.$_" }) | ? { $_.Name -match "$sourceProject\.|$destProject\." }