使用Get-childitem获取过去3天内修改过的文件列表

问题描述 投票:11回答:4

代码就像现在一样

get-childitem c:\pstbak\*.* -include *.pst | Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3)} |

基本上我要做的是获取上面文件夹中所有PST文件的列表,基于它们比3天更新。然后我想算一下结果。上面的代码没有错误,但带来零结果(文件夹中肯定有PST文件比三天更新。任何人都有任何想法?

powershell powershell-v2.0
4个回答
30
投票

试试这个:

(Get-ChildItem -Path c:\pstbak\*.* -Filter *.pst | ? {
  $_.LastWriteTime -gt (Get-Date).AddDays(-3) 
}).Count

14
投票

与之前的响应非常相似,但是来自当前目录,查看任何文件,仅查看4天之前的文件。这是我研究所需要的,上面的答案都非常有用。谢谢。

Get-ChildItem -Path . -Recurse| ? {$_.LastWriteTime -gt (Get-Date).AddDays(-4)}

2
投票

这是Dave Sexton提供的解决方案的一个小更新。很多时候你需要多个过滤器。 Filter参数只能接受一个字符串,而-Include参数可以接受一个字符串数组。如果你有一个大文件树,那么只将日期与一次比较有意义,而不是每个文件。这是我的更新版本:

$compareDate = (Get-Date).AddDays(-3)    
@(Get-ChildItem -Path c:\pstbak\*.* -Filter '*.pst','*.mdb' -Recurse | Where-Object { $_.LastWriteTime -gt $compareDate}).Count

1
投票

我想把它添加为对前一个答案的评论,但我不能。我尝试了Dave Sexton的答案,但如果计数为1则会出现问题。即使返回一个对象,也会强制执行数组。

([System.Object[]](gci c:\pstback\ -Filter *.pst | 
    ? { $_.LastWriteTime -gt (Get-Date).AddDays(-3)})).Count

如果为空,它仍然不返回零,但测试'-lt 1'有效。

© www.soinside.com 2019 - 2024. All rights reserved.