4

次の Powershell コードを使用して、ルートに robots.txt を含まないフォルダーを見つけようとしています。通常、これを再帰的に行うことができますが、この巨大なフォルダー構造を再帰するには永遠にかかります. 私が本当に必要としているのは、最初のレベルだけです。別名、C:\Projects にあるフォルダーのみを検索します。

基本的に、子の各セットから子を取得する必要があり、その後、robot.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 に答える