2012-07-25 110 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