从Powershell获得的总和参数

时间:2018-12-07 15:19:23

标签: powershell file count sum size

我正在创建一个脚本,逐行汇总文件中目录红色下每个文件的大小。

现在,递归搜索文件正在运行,我得到了源文件每一行的大小总和,但是我不确定如何将所有这些值加在一起。

我现在拥有的是:

#Read each line of a file for a directory
foreach($line in Get-Content .\file.txt) {
  #Prints the current line path
  echo $line
  #Prints a count of the files under that path and a sum of all files length
  Get-ChildItem -Recurse $line | Measure-Object -Property Length -Sum
}

此脚本的输出如下:

T:/folder_1/folder_2/2018/12/6/A
Count    : 30
Average  :
Sum      : 522382636
Maximum  :
Minimum  :
Property : Length

T:/folder_1/folder_2/2018/12/6/B
Count    : 2
Average  :
Sum      : 2835134
Maximum  :
Minimum  :
Property : Length

如何获取每个文件夹的每个Sum输出的总和,即所有.Sum属性值的总和?

1 个答案:

答案 0 :(得分:3)

结合notjustmeAnsgar Wiechers的建议:

Get-Content .\file.txt | ForEach-Object -ov results {
  # Calculate the total size for the path at hand, and
  # output the result as a custom object.
  [pscustomobject] @ {
    Path = $_
    Length = (Get-ChildItem -Recurse $_ | Measure-Object -Property Length -Sum).Sum
  }
} | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum

# Use $results to access the per-path values.

请注意如何使用外部Measure-Object对每个路径Measure-Object的结果求和。


如果您不需要存储每个路径的结果,并且只需要总和,那么解决方案将变得更加简单,如Ansgar所言:

(Get-ChildItem -LiteralPath (Get-Content .\file.txt) -Recurse |
   Measure-Object -Property Length -Sum).Sum

请注意如何将Get-Content输出的行数组直接传递到-LiteralPath,因为-Path-LiteralPath都被定义为{{1} }(字符串 arrays )。