Powershell Get-ChildItem目录中的最新文件

use*_*645 64 powershell

我们在名称中生成带日期的文件.(*下面是日期的通配符)我想获取最后一个文件,包含该文件的文件夹在其标题中也有一个日期(仅限月份).

我正在使用PowerShell,我计划每天运行它.到目前为止这是脚本:

  $LastFile = *_DailyFile
  $compareDate = (Get-Date).AddDays(-1)
  $LastFileCaptured = Get-ChildItem -Recurse | Where-Object {$LastFile.LastWriteTime        
         -ge $compareDate}
Run Code Online (Sandbox Code Playgroud)

man*_*lds 142

如果您想要目录中的最新文件,而您只使用它LastWriteTime来确定最新文件,则可以执行以下操作:

gci path | sort LastWriteTime | select -last 1
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您只想依赖具有日期的名称,您应该能够做类似的事情

gci path | select -last 1
Run Code Online (Sandbox Code Playgroud)

此外,如果目录中有目录,则可能需要添加 ?{-not $_.PsIsContainer}

  • 小点,但普通英语中的“最新”表示“最新”,如果您实际想要的是“最旧”,则代码正确。如果要使用最新,最新或“最新”的文件,则需要`gci path |。排序LastWriteTime | 选择-first 1'。您只是爱英语!:) (2认同)
  • 如果您只想要文件,请使用“-file”。 (2认同)

Ken*_*war 15

尝试:

$latest = (Get-ChildItem -Attributes !Directory | Sort-Object -Descending -Property LastWriteTime | select -First 1)
$latest_filename = $latest.Name 
Run Code Online (Sandbox Code Playgroud)

解释:

PS C:\Temp> Get-ChildItem -Attributes !Directory *.txt | Sort-Object -Descending -Property LastWriteTime | select -First 1


    Directory: C:\Temp


Mode                LastWriteTime         Length Name                                                                                
----                -------------         ------ ----                                                                                
-a----         5/7/2021   5:51 PM           1802 Prison_Mike_autobiography.txt                    
Run Code Online (Sandbox Code Playgroud)
  • Get-ChildItem -Attributes !Directory *.txtGet-ChildItemgci:仅获取当前目录中的文件列表。我们也可以根据需要提供文件扩展名过滤器,例如*.txt. 参考:gciGet-ChildItem
  • Sort-Object -Descending -Property LastWriteTime:按照LastWriteTime(修改时间)对文件进行降序排序。参考
  • select -First 1:获取第一条/顶部记录。参考Select-Object/选择

获取文件元数据

PS C:\Temp> $latest.Name
Prison_Mike_autobiography.txt

PS C:\Temp> $latest.DirectoryName
C:\Temp

PS C:\Temp> $latest.FullName
C:\Temp\Prison_Mike_autobiography.txt

PS C:\Temp> $latest.CreationTime
Friday, May 7, 2021 5:51:19 PM


PS C:\Temp> $latest.Mode
-a----

Run Code Online (Sandbox Code Playgroud)


Jes*_*sta 6

@manojlds 的答案可能最适合您只对根目录中的文件感兴趣的情况:

\path
     \file1
     \file2
     \file3
Run Code Online (Sandbox Code Playgroud)

但是,如果您感兴趣的文件是文件和目录树的一部分,例如:

\path
     \file1
     \file2
     \dir1
         \file3
         \dir2
              \file4
Run Code Online (Sandbox Code Playgroud)

要递归地查找 Windows 中最近修改的 10 个文件的列表,您可以运行:

PS > $Path = pwd # your root directory
PS > $ChildItems = Get-ChildItem $Path -Recurse -File
PS > $ChildItems | Sort-Object LastWriteTime -Descending | Select-Object -First 10 FullName, LastWriteTime

Run Code Online (Sandbox Code Playgroud)


小智 5

是的,我认为这会更快。

Get-ChildItem $folder | Sort-Object -Descending -Property LastWriteTime -Top 1 
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢按降序排序,然后取第一个结果的想法。根据它在幕后的工作方式,在大目录上可能会更快。但您需要通过管道选择。此外,Top 无效。`获取ChildItem $文件夹| 排序对象-降序-属性LastWriteTime | 选择-第一个1` (2认同)