使用 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"}
- 从退回的项目中删除名称 index.aspx。
- 我想过滤掉任何以下划线开头的文件。
- 排除路径中包含 /stocklist/ 的任何内容。
- 排除路径中包含 /assets/ 的任何内容。
- 并排除路径中包含 .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*_' }
我正在遍历目录树,但试图过滤掉一些东西。
这是我拼凑的代码;
Get-ChildItem -Path $pathName -recurse -Filter index.aspx* -Exclude */stocklist/* | ? {$_.fullname -NotMatch "\\s*_"} | Where {$_.FullName -notlike "*\assets\*" -or $_.FullName -notlike ".bk"}
- 从退回的项目中删除名称 index.aspx。
- 我想过滤掉任何以下划线开头的文件。
- 排除路径中包含 /stocklist/ 的任何内容。
- 排除路径中包含 /assets/ 的任何内容。
- 并排除路径中包含 .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*_' }