例如,如果我有一个包含以下文件的目录:
Test-20120626-1023.txt
Test-20120626-0710.txt
Test-20120626-2202.txt
Test-20120626-1915.txt
Test-20120626-1142.txt
Run Code Online (Sandbox Code Playgroud)
如您所见,每个文件名都包含可排序格式的创建时间.我的问题是如何找到最新文件名的名称(在本例中Test-20120626-2202.txt)并将其存储在变量中?
注意:如果目录路径有任何不同,它也会存储在变量中.
小智 72
你可以尝试这样的事情:
$dir = "C:\test_code"
$latest = Get-ChildItem -Path $dir | Sort-Object LastAccessTime -Descending | Select-Object -First 1
$latest.name
Run Code Online (Sandbox Code Playgroud)
CB.*_*CB. 10
如果名称是文件属性的等效创建时间,则CreationTime可以轻松使用:
$a = Dir | Sort CreationTime -Descending | Select Name -First 1
Run Code Online (Sandbox Code Playgroud)
然后
$a.name
Run Code Online (Sandbox Code Playgroud)
包含名称文件.
如果名称总是相同的格式(日期和时间与填充0:ex 20120102-0001),我认为这也是这样的:
$a = Dir | Sort Name -Descending | Select Name -First 1
Run Code Online (Sandbox Code Playgroud)
小智 7
如果您正在使用大量文件,我建议使用该-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
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因,文件创建日期与文件名中标记的日期不同,那么您可以将文件名解析为日期时间对象并按表达式排序:
$file = Get-ChildItem |
Sort-Object { [DateTime]::ParseExact($_.BaseName,'\Te\s\t\-yyyyMMdd\-HHmm',$null) } |
Select-Object -Last 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82105 次 |
| 最近记录: |