在工作的时候,文件夹很多,有时候不知道是哪些文件占据了那么大的空间,这个时候也很难一个个去找,everything倒是可以实现按照时间排序文件夹中的文件,这里介绍一个powershell的方法,只有短短的几行代码就可以实现我们想要的功能

完整代码

  1. function FoldMoniter([System.Double]$time,$path)
  2. {
  3. $yestoday = (Get-Date).AddDays($time) #calculate date using AddDays() method
  4. #all files in fold we looking for monitering, will be searched
  5. $result = Get-ChildItem -Path $path -Recurse |
  6. Where-Object {$_.CreationTime -gt $yestoday} |
  7. Sort-Object -Property LastWriteTime -Descending
  8. $result | measure | Select-Object Count
  9. $result | Out-GridView
  10. }
  11. FoldMoniter -time -10 -path D:\临 #implement function
  • 首先这里定义了一个函数,函数有两个参数$time$path$time的数据类型定义成了[System.Double]因为在进行日期运算的时候,无法对string进行运算
  • 通过get-date命令获得了当天的日期,在当前日期上增加得到我们需要的时间段AddDays(-10)就表示在当前日期上倒退十天
  • get-childitem将文件夹中所有的文件都读取出来,-recurse可以将子文件夹的文件一起读出,利用管道搭配where-object对所有的文件对象进行筛选,挑选出创建日期在之前构建的日期范围之内的文件,这里是用&_.CreationTime,再以管道的方式传递,使用Sort-Object -Property LastWriteTime -Descending对写入日期进行降序排列
  • 将结果进行输出,这里用out-gridveiw,会弹出一个额外的窗口,在上面可以浏览文件路径,也可以进行排序和筛选
  • 将结果通过管道,使用measure命令进行统计,并挑选出count也就是文件数量这一个property输出
  • 调用函数的时候,可以直接像再powershell命令行中使用命令一样,cmdlet -参数1 value1 -参数2 value2

    结果

    image.png