首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从powershell的Get-ChildItem结果中排除项目列表?

如何从powershell的Get-ChildItem结果中排除项目列表?
EN

Stack Overflow用户
提问于 2013-10-06 18:47:49
回答 5查看 92.9K关注 0票数 34

我想要递归地获取路径中的文件列表(实际文件数量),不包括某些类型:

代码语言:javascript
复制
Get-ChildItem -Path $path -Recurse | ? { $_.Name -notlike "*.cs" -and $_.Name -notlike "*.tt" }

但我有一个很长的排除列表(列举几个):

代码语言:javascript
复制
@("*.cs", "*.tt", "*.xaml", "*.csproj", "*.sln", "*.xml", "*.cmd", "*.txt")

如何使用此表单获取列表:

代码语言:javascript
复制
Get-ChildItem -Path $path -Recurse | ? { <# what to put here ?#> }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-11-29 01:18:29

这也行得通:

代码语言:javascript
复制
get-childitem $path -recurse -exclude *.cs,*.tt,*.xaml,*.csproj,*.sln,*.xml,*.cmd,*.txt

请注意,-include仅适用于-recurse或路径中的通配符。(实际上它在6.1pre2中一直有效)

还要注意,如果路径中没有-recurse或通配符,同时使用-exclude和-filter将不会列出任何内容。

在PS5中,-include和-literalpath似乎也有问题。

-include和-exclude还有一个bug,它的根路径为"\",不显示任何内容。在unix中,它会给出一个错误。

票数 50
EN

Stack Overflow用户

发布于 2013-10-06 19:02:49

您可以使用-exclude参数为Get-ChildItem提供排除项:

代码语言:javascript
复制
$excluded = @("*.cs", "*.tt", "*.xaml", "*.csproj", "*.sln", "*.xml", "*.cmd", "*.txt")
get-childitem -path $path -recurse -exclude $excluded
票数 33
EN

Stack Overflow用户

发布于 2013-10-06 23:14:43

下面是使用Where-Object cmdlet的方法:

代码语言:javascript
复制
$exclude = @(".cs", ".tt", ".xaml", ".csproj", ".sln", ".xml", ".cmd", ".txt")
Get-ChildItem -Path $path -Recurse | Where-Object { $exclude -notcontains $_.Extension }

如果您不希望在结果中也返回目录,请使用以下命令:

代码语言:javascript
复制
$exclude = @(".cs", ".tt", ".xaml", ".csproj", ".sln", ".xml", ".cmd", ".txt")
Get-ChildItem -Path $path -Recurse | Where-Object { (-not $_.PSIsContainer) -and ($exclude -notcontains $_.Extension) }
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19207991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档