使用 Powershell 版本 4 从 Get-ChildItem 中排除多个项目

Excluding multiple items from Get-ChildItem using Powershell version 4

我正在遍历目录树,但试图过滤掉一些东西。

这是我拼凑的代码;

Get-ChildItem -Path $pathName -recurse -Filter index.aspx* -Exclude */stocklist/* | ? {$_.fullname -NotMatch "\\s*_"} | Where {$_.FullName -notlike "*\assets\*" -or $_.FullName -notlike ".bk"}

这适用于除路径中的 .bk 之外的所有内容。我很确定这是我的语法错误。

提前致谢。

您可以创建正则表达式字符串并在 Where-Object 子句中对文件的 .DirectoryName 属性 使用 -notmatch 以排除您不需要的文件:

$excludes = '/stocklist/', '/assets/', '.bk'
# create a regex of the folders to exclude
# each folder will be Regex Escaped and joined together with the OR symbol '|'
$notThese = ($excludes | ForEach-Object { [Regex]::Escape($_) }) -join '|'

Get-ChildItem -Path $pathName -Filter 'index.aspx*' -File -Recurse |
Where-Object{ $_.DirectoryName -notmatch $notThese -and $_.Name -notmatch '^\s*_' }