如何用PowerShell从指定文件列表计算文件总大小?
解决PowerShell计算列表文件总大小的问题
你遇到的问题主要是两个点:一是直接用Get-Content读取列表文件时,没有正确解析那些带双引号的文件路径;二是Measure-Object的参数用法有误。下面给你一套能得到预期结果的解决方案:
问题分析
你的JPGS.LST里的文件路径是用双引号包裹的,直接用Get-Content读取会把整行内容当成单个字符串,而不是拆分出每个独立的文件路径。另外,原脚本里Measure-Object -Property Length -Sum Length的写法不正确,-Sum是开关参数,不需要再指定Length。
正确的PowerShell脚本
# 定义列表文件的路径 $Listfile = "JPGS.LST" # 读取文件内容,提取所有带双引号的有效文件路径 $filePaths = (Get-Content $Listfile -Raw) -split '"' | Where-Object { $_ -match '\S' } # 计算所有文件的总字节数 $totalBytes = ($filePaths | ForEach-Object { (Get-Item $_).Length } | Measure-Object -Sum).Sum # 将字节数格式化为易读的MB单位(保留1位小数) $totalSize = "{0:N1} MB" -f ($totalBytes / 1MB) # 输出结果 $totalSize
脚本解释
- 读取并解析路径:
- 使用
-Raw参数把整个文件内容读取为单个字符串,方便统一拆分双引号。 -split '"'按双引号分割字符串,再用Where-Object { $_ -match '\S' }过滤掉空行或纯空白的元素,得到每个有效的文件路径。
- 使用
- 计算总大小:
- 遍历每个路径,用
Get-Item获取文件对象并读取Length属性(文件大小,单位字节)。 - 用
Measure-Object -Sum计算所有字节数的总和。
- 遍历每个路径,用
- 格式化输出:
- 把总字节数除以
1MB(PowerShell内置的单位常量,等于1048576字节),再用格式化字符串保留1位小数,得到类似12.5 MB的结果。
- 把总字节数除以
优化补充(处理不存在的文件)
如果列表里可能有不存在的文件,可以加个判断跳过这些文件并给出警告:
$totalBytes = ($filePaths | ForEach-Object { if (Test-Path $_ -PathType Leaf) { (Get-Item $_).Length } else { Write-Warning "无法找到文件: $_" 0 } } | Measure-Object -Sum).Sum
内容的提问来源于stack exchange,提问作者Bryan Keadle
相关产品推荐
相关产品推荐

