42

例如,如果我有一个包含以下文件的目录:

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

如您所见,每个文件名都包含可排序格式的创建时间。

如何找到最新文件名的名称(在这种情况下Test-20120626-2202.txt)并将其存储在变量中?

注意:如果目录路径有任何不同,它也会存储在一个变量中。

4

5 回答 5

84

你可以尝试这样的事情:

$dir = "C:\test_code"
$latest = Get-ChildItem -Path $dir | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$latest.name
于 2012-06-26T15:42:10.937 回答
15

如果名称是文件属性的等效创建时间CreationTime,您可以轻松使用:

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

然后

$a.name

包含名称文件。

我认为如果名称始终具有相同的格式(日期和时间填充为 0,例如20120102-0001),它也可以这样工作:

$a = Dir | Sort Name -Descending | Select Name -First 1
于 2012-06-26T15:35:06.727 回答
8

如果您正在处理大量文件,我建议使用该-Filter参数,因为执行时间将大大减少。

根据 James 提供的示例,以下是它的使用方法;

$dir = "C:\test_code"
$filter="*.txt"
$latest = Get-ChildItem -Path $dir -Filter $filter | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$latest.name
于 2015-02-11T17:41:29.347 回答
7

如果由于某种原因,文件创建日期与文件名中标记的日期不同,则您可以将文件名解析为日期时间对象并按表达式排序:

$file = Get-ChildItem | 
Sort-Object { [DateTime]::ParseExact($_.BaseName,'\Te\s\t\-yyyyMMdd\-HHmm',$null) } |
Select-Object -Last 1
于 2012-06-26T15:59:27.823 回答
0

我用它来获取最后更新的文件。容易写。

ls | sort LastWriteTime
于 2020-02-20T15:14:02.917 回答