目录列表中的 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 文件大小总计的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ls -l 中的“总计”不等于列出的总文件大小? [关闭]