2012-04-03 39 views
16

Tôi có một thư mục dự án có tên là topfolder và tôi muốn tìm tất cả các tệp trong tất cả các thư mục con khớp với một mẫu nhất định, ví dụ: khi thư mục chứa foo ở bất kỳ đâu trong tên của nó, tôi muốn liệt kê tất cả các tệp bên trong nó.Cách tìm tệp trong thư mục có tên nhất định bằng Get-ChildItem?

tôi đã cố gắng một cái gì đó như:

gci .\topfolder -rec -filter *foo* 

nhưng nó có hai vấn đề:

  1. Chỉ những tệp thực sự chứa foo sẽ được liệt kê (Tôi muốn bất kỳ tập tin trong thư mục foo-like).
  2. Các thư mục phù hợp với bộ lọc này cũng sẽ là một phần của tập hợp kết quả.

Sau đó, tôi cố gắng này:

gci .\topfolder\*foo* -include *.* 

nhưng điều đó không làm việc ở tất cả - rõ ràng là kí tự đại diện trận đấu chỉ là một phân khúc duy nhất của một con đường để mô hình đó sẽ phù hợp topfolder\foobar nhưng không topfolder\subfolder\foobar.

Cách duy nhất tôi đã tìm thấy cho đến nay là sử dụng Get-ChildItem hai lần, như thế này:

gci .\topfolder -rec -include *foo* | where { $_.psiscontainer } | gci 

này hoạt động nhưng nó có vẻ như một sự lãng phí để gọi gci hai lần và tôi hy vọng tôi chỉ didn' t tìm biểu thức ký tự đại diện phù hợp cho một số nội dung như -Path, -Filter hoặc -Include.

Cách tốt nhất để làm điều đó là gì?

Trả lời

18

tôi sẽ sử dụng tham số Lọc thay vì Include, nó thực hiện fatser nhiều

gci .\topfolder -rec -filter *foo* | where { $_.psiscontainer } | gci 
+0

Làm thế nào là nó khác với ví dụ cuối cùng của tôi? Nó sẽ không còn chậm hơn nỗ lực của tôi? – Borek

+0

Xin lỗi, tôi chắc đã bị mù;) –

+0

Chỉ cần đăng câu trả lời cập nhật –

Các vấn đề liên quan