Powershell在root目录中找到一个带有排除项的文件

时间:2014-05-27 18:27:06

标签: powershell

我有以下代码尝试在我的项目中查找文件夹。

$rootDir = Split-Path -Parent $MyInvocation.MyCommand.Path

    $fileName = "Scripts*"
    $paths = gci -path $rootDir -filter $fileName -Recurse | Select-Object -Expand FullName

我遇到的问题是我不希望它找到bin或obj文件夹中的文件夹。有没有办法从搜索中排除这些?

基本上我需要递归搜索我的解决方案文件夹中的文件夹名称,不包括bin / obj位置。

当我尝试使用-Exclude时,它会给出我的编译错误。我认为必须有一种比这更简单的方法。

2 个答案:

答案 0 :(得分:3)

我认为问题在于-Exclude只接受字符串。您需要使用Where-Object过滤掉多个字符串。

$paths = gci -path $rootDir -filter $fileName -Recurse | Where-Object {$_.FullName -notlike "*bin*\*" -and $_.FullName -notlike "*obj*\*"} | Select-Object -Expand FullName

答案 1 :(得分:0)

问题是-Exclude传递给Provider,而文件系统提供程序一般不擅长过滤。我建议使用Where子句并使用其中一个-Match运算符(-inotmatch是一个不区分大小写的反向匹配,因此它排除了与文本匹配的任何内容),如下所示:

$rootDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$fileName = "Scripts*"
$paths = gci -path $rootDir -filter $filename -Recurse | Select-Object -Expand FullName | ?{$_ -inotmatch "\\(bin|obj)\\"}

查找以反斜杠()开头的字符串,后跟bin或obj,后跟另一个反斜杠。