4

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

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

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

1 回答 1

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"
}
于 2012-07-25T20:56:30.840 回答