如何使用PowerShell脚本在目录中查找最新文件?

如何使用PowerShell脚本在目录中查找最新文件?,powershell,Powershell,例如,如果我有一个包含以下文件的目录: Test-20120626-1023.txt Test-20120626-0710.txt Test-20120626-2202.txt Test-20120626-1915.txt Test-20120626-1142.txt 如您所见,每个文件名都包含可排序格式的创建时间 如何查找最新文件名的名称(在本例中为Test-20120626-2202.txt)并将其存储在变量中 注意:如果目录路径有任何不同,它也会存储在变量中。如果名称是文件属性的等效创建

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

Test-20120626-1023.txt
Test-20120626-0710.txt
Test-20120626-2202.txt
Test-20120626-1915.txt
Test-20120626-1142.txt
如您所见,每个文件名都包含可排序格式的创建时间

如何查找最新文件名的名称(在本例中为
Test-20120626-2202.txt
)并将其存储在变量中


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

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

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

包含文件名

我想如果名字总是这样的话,它也是这样工作的 相同的格式(日期和时间,填充0,例如20102-0001):


您可以尝试以下方法:

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

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

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

如果要处理大量文件,我建议使用
-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

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

ls | sort LastWriteTime

如果要搜索特定文件,请将$dir更改为“C:\test\u code\somefile.*”,如果要搜索所有子目录
Get ChildItem-Recurse-Path$dir
等。还请注意,选择对象中的-First参数选择top k.
LastAccessTime
?它不应该是
LastWriteTime
?或者,
CreationTime
?@PeterMortensen我也有同样的问题,但不知何故,
LastAccessTime
对我有效。奇怪!“按表达式排序”是什么意思?
$dir = "C:\test_code"
$filter="*.txt"
$latest = Get-ChildItem -Path $dir -Filter $filter | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$latest.name
ls | sort LastWriteTime