Powershell返回包含特定文件但不完全递归的目录

Powershell返回包含特定文件但不完全递归的目录,powershell,Powershell,使用下面的Powershell代码,我试图找到根目录中不包含robots.txt的文件夹。通常,我可以递归地执行此操作,但递归这个庞大的文件夹结构需要花费很长时间。我真正需要的只是第一级,即只搜索在C:\Projects中找到的文件夹 基本上,我需要从每组孩子中得到孩子,然后才返回没有robots.txt文件的父母。这里的问题是嵌套for循环中的$给了我CWD,而不是我正在搜索的目录的子目录。我知道我可能需要在这里使用一个-Where,但我有点不知所措,而且对powershell还很陌生。感谢您

使用下面的Powershell代码,我试图找到根目录中不包含robots.txt的文件夹。通常,我可以递归地执行此操作,但递归这个庞大的文件夹结构需要花费很长时间。我真正需要的只是第一级,即只搜索在C:\Projects中找到的文件夹

基本上,我需要从每组孩子中得到孩子,然后才返回没有robots.txt文件的父母。这里的问题是嵌套for循环中的$给了我CWD,而不是我正在搜索的目录的子目录。我知道我可能需要在这里使用一个-Where,但我有点不知所措,而且对powershell还很陌生。感谢您的帮助

$drv = gci C:\Projects | %{
    $parent = $_; gci -exclude "robots.txt" | %{$_.parent}} | gu
这一行(为了清晰起见,将其分散在几行上)应该能帮到你:

# look directly in projects, not recursively
dir c:\projects | where {
    # returns true if $_ is a container (i.e. a folder)
    $_.psiscontainer
} | where {
    # test for existence of a file called "robots.txt"
    !(test-path (join-path $_.fullname "robots.txt"))
} | foreach {
    # do what you want to do here with $_
    "$($_.fullname) does not have robots.txt"
}

谢谢测试路径虽然不如再次递归子目录那么优雅,但速度更快,更易于阅读。您认为使用深度限制的多重递归技术是优雅的吗?真的吗?:)首先,我试图用伪代码编写它,而多重递归是“描绘”我想要的东西的最简单方法。但是知道有一种测试路径方法,我想这会让事情变得更容易。不确定是从哪个版本开始的,但是使用Get-ChildItem c:\Projects-Directory可以为您过滤目录。@Rashack是的,在更新版本的powershell中,
dir-ad
。我不确定2012年我写这个答案的时候它是否得到了支持。