2011-12-30 51 views
158

Tôi đang tìm tệp trong tất cả các thư mục.Tìm kiếm tệp đệ quy bằng PowerShell

Copyforbuild.bat có sẵn ở nhiều nơi và tôi muốn tìm kiếm theo cách đệ quy.

$File = "V:\Myfolder\**\*.CopyForbuild.bat" 

Tôi làm cách nào để thực hiện trong PowerShell?

Trả lời

266

Sử dụng Get-ChildItem cmdlet với -Recurse switch:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force 
+0

Dường như có một vấn đề mà nếu nó chạy vào một thư mục mà bạn không có quyền truy cập, toàn bộ tìm kiếm bị hủy bỏ vì quá trình thoát. Có cách nào xung quanh đó không? – deed02392

+4

Hãy thử đặt tham số ErrorAction thành Tiếp tục hoặc SilentlyContinue (trong trường hợp giá trị của nó không được đề cập). –

+11

Cách ngắn hơn để thực hiện chính xác điều tương tự: 'cd V: \ MyFolder' theo sau là ' ls -r -inc CopyForBuild.bat' –

2

Hãy thử điều này:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse | Where-Object { $_.Attributes -ne "Directory"} 
+1

Bạn cũng có thể sử dụng' | Đối tượng {!$ _PSIsContainer} 'để loại trừ các thư mục – Gargravarr

8
Get-ChildItem V:\MyFolder -name -recurse *.CopyForbuild.bat 

sẽ cũng làm việc

21

Tôi biết câu hỏi là cũ, nhưng tôi có thể không bình luận gì với câu trả lời của Shay Levy.

Khi tìm kiếm các thư mục mà bạn có thể nhận được một lỗi dựa trên an ninh (ví dụ C:\Users) sử dụng lệnh sau:

Get-ChildItem -Path V:\Myfolder -Filter CopyForbuild.bat -Recurse -ErrorAction SilentlyContinue -Force 
4

Bộ lọc sử dụng ký tự đại diện

Get-ChildItem -Filter CopyForBuild* -Include *.bat,*.cmd -Exclude *.old.cmd,*.old.bat -Recurse 

lọc sử dụng Regex

Get-ChildItem -Path "V:\Myfolder" -Recurse 
| Where-Object { $_.Name -match '\ACopyForBuild\.[(bat)|(cmd)]\Z' } 
13

Tôi sử dụng tính năng này để tìm tệp và sau đó hiển thị PowerShell toàn bộ đường dẫn của các kết quả:

dir -Path C:\FolderName -Filter FileName.fileExtension -Recurse | %{$_.FullName} 

Bạn luôn có thể sử dụng các ký tự đại diện * trong FolderName và/hoặc FileName.fileExtension. Ví dụ:

dir -Path C:\Folder* -Filter File*.file* -Recurse | %{$_.FullName} 

Ví dụ trên sẽ tìm kiếm bất kỳ thư mục trong ổ đĩa C:\ bắt đầu với từ Folder. Vì vậy, nếu bạn có một Thư mục có tên là FolderFooFolderBar PowerShell sẽ hiển thị kết quả từ cả hai thư mục đó.

Tương tự với tên tệp và phần mở rộng tệp. Nếu bạn muốn tìm kiếm một tập tin có phần mở rộng nhất định, nhưng không biết tên của tập tin bạn có thể sử dụng:

dir -Path C:\FolderName -Filter *.fileExtension -Recurse | %{$_.FullName} 

hoặc ngược lại:

dir -Path C:\FolderName -Filter FileName.* -Recurse | %{$_.FullName} 
+2

Tôi thấy câu trả lời này cực kỳ hữu ích vì nó giải quyết một trường hợp sử dụng cụ thể - thực sự muốn sử dụng tệp mà bạn đang tìm kiếm. Các | để cung cấp cho bạn tên đầy đủ của tập tin là một cái gì đó còn thiếu trong các câu trả lời khác. – Sanity1123

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