我有以下代码尝试在我的项目中查找文件夹。
$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时,它会给出我的编译错误。我认为必须有一种比这更简单的方法。
答案 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,后跟另一个反斜杠。