Подтвердить что ты не робот

Как найти новейший файл в каталоге с помощью PowerShell script?

Если, например, у меня есть каталог, который содержит следующие файлы:

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

Как вы можете видеть, каждое имя файла содержит время создания, которое находится в отсортированном формате. Мой вопрос в том, как найти имя последнего имени файла (в данном случае Test-20120626-2202.txt) и сохранить его в переменной?

Примечание. Путь к каталогу также сохраняется в переменной, если это имеет значение.

4b9b3361

Ответ 1

Вы можете попробовать что-то вроде этого:

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

Ответ 2

если имя является эквивалентным временем создания свойства файла CreationTime, вы можете легко использовать:

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

затем

$a.name

содержит файл имени.

Я думаю, что это тоже работает, если имя всегда тот же формат (дата и время с дополнением 0: ex 20120102-0001):

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

Ответ 3

Если вы работаете с большим количеством файлов, я бы предложил использовать параметр -Filter как время выполнения будет значительно сокращено.

Основываясь на примере, приведенном Джеймсом, вот как это будет использоваться;

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

Ответ 4

Если по какой-то причине дата создания файлов отличается от даты, указанной в имени файла, тогда вы можете проанализировать имя файла в объекте datetime и отсортировать по выражению:

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