2012-06-26 63 views
31

Nếu, ví dụ, tôi có một thư mục chứa file sau:Cách tìm tệp mới nhất trong thư mục bằng tập lệnh PowerShell?

Test-20120626-1023.txt 
Test-20120626-0710.txt 
Test-20120626-2202.txt 
Test-20120626-1915.txt 
Test-20120626-1142.txt 

Như bạn có thể thấy, mỗi tên tập tin chứa thời tạo mà là ở định dạng sắp xếp. Câu hỏi của tôi là cách tìm tên của tên tệp mới nhất (trong trường hợp này là Test-20120626-2202.txt) và lưu trữ nó trong biến?

Lưu ý: Đường dẫn thư mục cũng được lưu trữ trong biến nếu nó tạo ra bất kỳ sự khác biệt nào.

Trả lời

54

Bạn có thể thử một cái gì đó như thế này:

$dir = "C:\test_code" 
$latest = Get-ChildItem -Path $dir | Sort-Object LastAccessTime -Descending | Select-Object -First 1 
$latest.name 
+1

Và nếu bạn muốn tìm kiếm một tập tin cụ thể, thay đổi $ dir để "C:. \ Test_code \ somefile *" –

+0

và nếu bạn muốn tìm kiếm tất cả subdirs 'Get-ChildItem -Recurse -Path $ dir' vv Cũng lưu ý tham số -Đầu tiên trong Select-Object chọn đầu k. –

8

nếu tên của nó là thời gian sáng tạo tương đương với thuộc tính tập tin CreationTime bạn có thể dễ dàng sử dụng:

$a = Dir | Sort CreationTime -Descending | Select Name -First 1 

sau đó

$a.name 

chứa các tập tin tên.

Tôi nghĩ rằng công trình này nếu cũng tên có luôn cùng định dạng (ngày & Time với đệm 0: cựu 20.120.102-0001):

$a = Dir | Sort Name -Descending | Select Name -First 1 
4

Nếu, vì lý do nào đó, ngày tạo tệp khác với ngày được tạo trong tên tệp thì bạn có thể phân tích tên tệp thành đối tượng ngày giờ và sắp xếp theo biểu thức:

$file = Get-ChildItem | 
Sort-Object { [DateTime]::ParseExact($_.BaseName,'\Te\s\t\-yyyyMMdd\-HHmm',$null) } | 
Select-Object -Last 1 
5

Nếu bạn đang làm việc với số lượng lớn tệp, tôi khuyên bạn nên sử dụng tham số -Filter khi thời gian thực hiện sẽ giảm đáng kể.

Dựa trên ví dụ mà James cung cấp, dưới đây là cách nó sẽ được sử dụng;

$dir = "C:\test_code" 
 
$filter="*.txt" 
 
$latest = Get-ChildItem -Path $dir -Filter $filter | Sort-Object LastAccessTime -Descending | Select-Object -First 1 
 
$latest.name

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