在工作的时候,文件夹很多,有时候不知道是哪些文件占据了那么大的空间,这个时候也很难一个个去找,everything倒是可以实现按照时间排序文件夹中的文件,这里介绍一个powershell的方法,只有短短的几行代码就可以实现我们想要的功能
完整代码
function FoldMoniter([System.Double]$time,$path)
{
$yestoday = (Get-Date).AddDays($time) #calculate date using AddDays() method
#all files in fold we looking for monitering, will be searched
$result = Get-ChildItem -Path $path -Recurse |
Where-Object {$_.CreationTime -gt $yestoday} |
Sort-Object -Property LastWriteTime -Descending
$result | measure | Select-Object Count
$result | Out-GridView
}
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
结果