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

时间:2013-06-28 14:10:18

标签: powershell powershell-v2.0

目前的代码

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

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

4 个答案:

答案 0 :(得分:30)

试试这个:

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

答案 1 :(得分:14)

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

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

答案 2 :(得分: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

答案 3 :(得分:1)

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

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

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