2012-07-25 49 views
4

使用以下Powershell代码,我试图找到不包含robots.txt的文件夹。通常情况下,我可以递归执行此操作,但它会采用FOREVER来缓解这种庞大的文件夹结构。我真正需要的仅仅是第一级,AKA只搜索C:\ Projects中的文件夹。Powershell返回包含特定文件但不完全递归的目录

基本上我需要从每组儿童中得到孩子,然后才返回没有robots.txt文件的父母。我在这里遇到的问题是嵌套for循环中的$ _是给我的CWD,而不是我正在搜索的目录的子代。我知道我可能不得不在这里使用一个 - 但我有点头大,对PowerShell很新。任何帮助表示赞赏!

$drv = gci C:\Projects | %{ 
    $parent = $_; gci -exclude "robots.txt" | %{$_.parent}} | gu 

回答

6

这一个班轮(分布在几个为清楚起见)应该为你做的伎俩:

# 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" 
} 
+0

谢谢。测试路径虽然不像再次递归子目录那样优雅,但更快且更易于阅读。 – Richthofen 2012-07-25 21:21:52

+1

你认为多重递归与深度限制黑客是优雅的?真? :) – x0n 2012-07-27 00:01:14

+0

嗯,我试图先用伪代码编写它,而多次递归是'描绘'我想要的最简单的方法。但是知道这里有一个测试路径的方法,那么,我想这会让事情变得更轻松。 – Richthofen 2012-07-27 18:15:10

相关问题