使用Powershell递归处理目录统计信息

时间:2017-05-25 21:14:31

标签: powershell recursion directory filesize

我目前正在使用我编写的脚本以递归方式对目录使用Logparser查询来生成以下输出:

QTY     TOT KB    AVRG KB MAXM KB MINM KB
------- --------- ------- ------- -------
3173881 175101609 55      85373   0

我想使用powershell重现这一点,以便更容易收集这些信息。 (不需要安装/复制logparser)

我搜索并试图操纵我找到的例子,但不能完全解决这个问题。

这是我最接近的地方:

Get-ChildItem -Recurse | Measure-Object -sum Length | Select-Object Count,Average,Sum

返回:

Count Average                                                                     Sum
----- -------                                                                     ---
44663                                                                     40861708776

有什么建议吗?我宁愿坚持一条"一条线"命令,如果可能的话。

2 个答案:

答案 0 :(得分:1)

Measure-Object只执行它所说的内容,所以如果你只有-Sum,你只能获得总和。

Get-ChildItem -Recurse -File | Measure-Object -Sum -Average -Maximum -Minimum -Property Length | Select Count, Average, Sum, Maximum, Minimum

答案 1 :(得分:0)

Get-ChildItem很慢;那么使用RoboCopy列出文件夹内容呢?

$Folder = "D:\Downloads"
robocopy $Folder $Folder /S /L /BYTES /NJH /NJS /NDL /V | 
    ForEach-Object { (-split $_)[1] } | 
    Measure-Object -Maximum -Minimum -Sum -Average | 
    Format-Table

哪一个是单行:

robocopy $Folder $Folder /S /L /BYTES /NJH /NJS /NDL /V |%{(-split $_)[1]}|measure -a -s -ma -mi | ft

Robocopy选项包括:

/S - subdirectories (excluding empty ones)
/L - list files, don't do any copying or moving
/BYTES - show sizes in bytes, with no commas or anything
/NJH and /NJS - no header and summary lines in the output
/NDL - don't list directories
/V - verbose (do list individual files and their sizes)

然后ForEach拆分输出以删除文件名和robocopy状态,只保留大小,measure-object计算结果,format-table将其转换为更好看的表输出。