想象我有一個目錄結構如下所示:在一個目錄的父對另一目錄比較,其中管
parentDir\dirA\foo\
parentDir\dirB\foo\
parentDir\dirC\
parentDir\dirD\bar\foo\
parentDir\dirE\foo\
parentDir\dirF\
我只想選擇一個)是parentDir的直接孩子的目錄,以及b)有作爲直接孩子的foo目錄。
因此,A,B和E的展位符合資格,而C,D和F則不符合。
我第一次嘗試這樣PowerShell腳本:
$rootDir = gi(".")
dir -include "*foo*" -recurse | ? {$_.PSIsContainer -eq $true} | % {$_.Parent}
| ? { $_.Parent -eq $rootDir }
它發現的根目錄下的所有富項目,過濾掉非目錄,上升一到中間的目錄,然後過濾掉這不是任何目錄根目錄的孩子。
這將返回一個空列表。
但是,如果我改變最後的where子句如下:
? { $_.Parent.FullName -eq $rootDir.Fullname }
它的工作原理,我也得到了目錄輸出正確的。
所以我的問題是,爲什麼不能直接比較目錄對象的工作?它可能看起來像一件小事,但它意味着我對PowerShell對象的理解存在一些漏洞。
即使(而且,隨意批評的劇本我PowerShell的編碼風格,或指出更快/更正確的這樣做的方法)
我可能會寫爲'GCI | ?{$ _。psiscontainer-和(測試路徑$ _ \ foo)}'... – Joey 2010-06-29 18:57:11
@Johannes羅塞爾嘿,這更簡潔;謝謝。 – tenpn 2010-06-29 19:02:36