【问题标题】:How do I find the newest file in a directory using a PowerShell script?如何使用 PowerShell 脚本在目录中查找最新文件?
【发布时间】:2020-02-21 01:28:47
【问题描述】:

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

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

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

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

注意:目录路径也存储在一个变量中,如果它有什么不同的话。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你可以试试这样的:

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

    【讨论】:

    • 如果要搜索特定文件,请将 $dir 更改为 "C:\test_code\somefile.*"
    • 如果你想搜索所有子目录 Get-ChildItem -Recurse -Path $dir 等。还要注意 Select-Object 中的 -First 参数选择 top k。
    • LastAccessTime?不应该是LastWriteTime吗?或者CreationTime
    • @PeterMortensen 我也有同样的问题,但不知何故LastAccessTime 对我有用。奇怪!
    【解决方案2】:

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

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

    然后

    $a.name
    

    包含名称文件。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • “按表达式排序”是什么意思
        【解决方案5】:

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

        ls | sort LastWriteTime
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-12
          • 1970-01-01
          • 1970-01-01
          • 2016-11-22
          • 1970-01-01
          • 2022-01-08
          • 1970-01-01
          • 2010-11-13
          相关资源
          最近更新 更多