如何用PowerShell获取Z:\Main下直接子目录大小并写入文件?
没问题,这事儿用PowerShell完全能搞定,我给你写个实用的脚本,还会拆解每一步的作用,方便你理解和调整:
完整脚本示例
# 定义目标目录路径,就是你说的Z:\Main $targetDir = "Z:\Main" # 定义输出文件的保存路径,你可以改成自己想要的位置和文件名 $outputFile = "C:\Temp\SubDirSizes.txt" # 定义一个小函数,专门把字节数转换成易读的MB/GB/TB单位 function Convert-ToReadableSize { param([double]$Bytes) if ($Bytes -ge 1TB) { return "{0:N1}TB" -f ($Bytes / 1TB) } elseif ($Bytes -ge 1GB) { return "{0:N1}GB" -f ($Bytes / 1GB) } elseif ($Bytes -ge 1MB) { return "{0:N0}MB" -f ($Bytes / 1MB) # MB这里我设的整数,要小数的话改成N1就行 } else { return "{0:N0}KB" -f ($Bytes / 1KB) # 小于MB的显示KB,按需调整 } } # 获取Z:\Main下的所有直接子目录(-Directory只取目录,-Force可选,用来包含隐藏目录) $subDirs = Get-ChildItem -Path $targetDir -Directory -Force # 准备一个数组存结果 $results = @() foreach ($dir in $subDirs) { # 递归统计当前子目录下所有文件的总大小 $sizeSum = Get-ChildItem -Path $dir.FullName -Recurse -File -Force | Measure-Object -Property Length -Sum # 处理空目录的情况(空目录的Sum会是null,这里直接设为0) $totalBytes = if ($sizeSum.Sum) { $sizeSum.Sum } else { 0 } # 把字节数转成易读的单位 $readableSize = Convert-ToReadableSize -Bytes $totalBytes # 按照你要的格式拼接字符串 $results += "{0} {1}" -f $dir.FullName, $readableSize } # 把结果写入文件,用UTF8编码避免乱码 $results | Out-File -Path $outputFile -Encoding UTF8 Write-Host "搞定!结果已经保存到:$outputFile"
一些细节说明
- 路径修改:你可以直接改
$targetDir和$outputFile的值,换成自己需要的路径。 - 单位调整:如果想让MB也显示一位小数,把函数里的
{0:N0}MB改成{0:N1}MB就行,同理GB/TB的小数位数也可以按需调整。 - 隐藏目录:如果不需要统计隐藏的子目录,去掉
Get-ChildItem后面的-Force参数就行。 - 运行方式:把代码保存成
.ps1文件,然后以管理员身份打开PowerShell,先执行Set-ExecutionPolicy RemoteSigned(允许本地脚本运行),再运行这个脚本就行;也可以直接把代码复制到PowerShell控制台里执行。
内容的提问来源于stack exchange,提问作者Tak
相关产品推荐
相关产品推荐

