2012-06-26 23 views
31

Jeśli, na przykład, mam katalogu, który zawiera następujące pliki:Jak znaleźć najnowszy plik w katalogu za pomocą skryptu PowerShell?

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

Jak widać, każda nazwa pliku zawiera czas tworzenia, który jest w formacie sortable. Moje pytanie brzmi: jak znaleźć nazwę najnowszej nazwy pliku (w tym przypadku Test-20120626-2202.txt) i zapisać ją w zmiennej?

Uwaga: Ścieżka do katalogu jest również przechowywana w zmiennej, jeśli ma jakąkolwiek różnicę.

Odpowiedz

54

Można spróbować czegoś takiego:

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

A jeśli chcesz szukać konkretnego pliku, zmiana $ dir do "C:. \ Test_code \ somefile *" –

+0

i jeśli chcesz przeszukać wszystkie subdirs 'Get-ChildItem -Recurse -Path $ dir' itd. Zwróć również uwagę na - Pierwszy parametr w Select-Object wybiera top k. –

8

jeśli nazwa jest równoważny czas utworzenie właściwości pliku CreationTime można łatwo wykorzystać:

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

następnie

$a.name 

zawiera plik nazw.

myślę działa również to, czy nazwa ma zawsze sam format (data & Czas z wyściółką 0: ex 20120102-0001):

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

Jeśli z jakiegoś powodu data utworzenia pliku jest inna niż data wybita w nazwie pliku, można przeanalizować nazwę pliku w obiekcie datetime i posortować według wyrażenia:

5

Jeśli pracujesz z dużą liczbą plików, sugeruję użycie parametru -Filter, ponieważ czas wykonania zostanie znacznie skrócony.

Na podstawie przykładu podanego przez Jamesa, oto w jaki sposób zostanie użyty;

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

Powiązane problemy