目录列表中的 powershell 文件大小总计

Posted

技术标签:

【中文标题】目录列表中的 powershell 文件大小总计【英文标题】:powershell filesize total from a directory listing 【发布时间】:2018-05-23 05:19:50 【问题描述】:

我已经创建了一个这样的文件目录列表:

JPGS.LST:
"L:\_Testing\2016-05-20 20.22.53.jpg"
"L:\_Testing\2016-05-20 20.23.07.jpg"
"L:\_Testing\2016-05-20 20.23.12.jpg"
"L:\_Testing\2016-05-20 20.59.31.jpg"
"L:\_Testing\2016-05-20 21.19.25.jpg"
"L:\_Testing\2016-05-20 21.19.28.jpg"
"L:\_Testing\2016-05-20 21.49.09.jpg"
"L:\_Testing\2016-05-20 21.49.12.jpg"

我想从此列表中获取所有文件大小的总和 - 从列表中。

我正在使用此列表来减少这些图像。我想再次运行脚本以查看缩减后相同文件的总大小,因此我进行了前后比较。我看到的其他示例使用 powershell 目录列表...我需要能够使用输入文件来确定目录列表中文件的总大小。

我试过了:

$Files=Get-Content $Listfile
$totalSize = ($Files | Measure-Object -Property Length -Sum Length).Sum 

但这并没有产生预期的结果。我希望它解决类似

$TotalSize=12.5 MB

欧比万……你是我唯一的希望!

【问题讨论】:

$Files 返回字符串,您正在测量字符串长度。你需要一个 ForEach 来迭代和 Get-Item 来获取每个文件的长度,就像我的回答一样。 【参考方案1】:
$files = Get-ChildItem $path -Recurse -File
$sum=($files | Measure-Object -Property length -Sum).sum

如果您想要总和(MB、GB ..etc)的所需输出,请查看PowerShell display files size as KB, MB, or GB 讨论,使用很酷的技术。

【讨论】:

这似乎不正确。 “Get-Childitem $path -Recurse”不是在做自己的目录列表吗?我需要它来迭代提供的文件列表。试过这个:$ListFile="JPGSDIR.lst" $sum=($ListFiles | Measure-Object -Property length -Sum).sum write-Host $Sum 我显然不懂语法......这就是我在这里的原因! 对,您需要导入一个文件(其中包含文件路径列表)——我错过了。我提供的是列出来自特定路径的文件。 LotPings 的解决方案适合您。【参考方案2】:

您将不得不迭代 JPGS.LST 中包含的文件:

$TotalSize = 0
ForEach ($File in Get-Content '.\JPGS.LST')
    If (Test-Path $File.Trim('"'))$TotalSize+=(GI $File.Trim('"')).Lengthelse"$File not found"

"`$TotalSize=0:N2 MB" -f ($TotalSize/1MB)

【讨论】:

这很接近,但它表示所有文件“未找到”,即使它们存在。 必须删除文件中的双引号。上面已更改 - 再试一次 我刚刚确定 " 是问题所在,并来到这里看到您发现并提供了解决方案。您怎么这么容易做到这一点?!?!太棒了!谢谢欧比万! :-) 我当然希望这些评论和帖子一样易于编辑。似乎无法以可读的方式格式化工作代码块:$ListFile=$args[0] $TotalSize = 0 ForEach ($File in Get-Content $ListFile) If (Test-Path $File.Trim('"'))$TotalSize+=(GI $File.Trim('"')).Lengthelse"$File not found" "$TotalSize=0:N2 MB" -f ($TotalSize/1MB)`【参考方案3】:

也许这就是你想要的:

ls -recurse | %  [long]($_.Length)  | Measure-Object -sum | %  $_.Sum 

【讨论】:

好的......我有点明白你在做什么,但试图解释。虽然我得到了一个数字,但它不是正确的数字。 $totalsize = $Files | % [int]($_.Length) | Measure-Object -sum | % $_.Sum write-Host $TotalSize1 我在脚本中添加了子目录(递归)。

以上是关于目录列表中的 powershell 文件大小总计的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell 博文目录

为啥 ls -l 中的“总计”不等于列出的总文件大小? [关闭]

powershell 将文件从列表复制到另一个目录

powershell 根据文件中的字节数转换文件大小单位

如何递归获取PowerShell中的所有文件和文件夹的大小,自定义输出

powershell 这将获取活动目录中OU的组列表,然后输出到foreach块中附加的文件