首页 > 解决方案 > 文件夹结构中的项目计数和大小

问题描述

计数和测量文件夹内容

尝试编写脚本检查目录结构中的大型文件夹。

我的测试脚本似乎只能在顶级文件夹上准确运行,并且只能使用两个单独的 Get-ChildItem 命令,一个提供计数,另一个提供总和。


$profiles = Get-ChildItem "C:\Users"

ForEach ($user in $profiles) {

<# getting the total number of items in the folder first #>
$itemsInfo1 = Get-ChildItem "C:\Users\$user" -Recurse -Force -ErrorAction SilentlyContinue 
$allitemsCount = $itemsInfo1.Count

<# getting the total size of all items in the folder second #>
$itemsInfo2 = Get-ChildItem "C:\Users\$user" -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
$allitemsSize = $itemsInfo2.Sum

$itemsSizeMB = [System.Math]::Round((($allitemsSize)/1MB),2) 
$itemsSizeGB = [System.Math]::Round((($allitemsSize)/1GB),2) 

Write-Host $user,$allitemsCount" Items",$itemsSizeMB" MB", $itemsSizeGB" GB"

我想通过简单的手动覆盖 $profiles 和 $itemsInfo 变量中的路径来在任何文件夹上仔细阅读此脚本。

但是,将相关路径更改为低一级子文件夹(例如 $profiles = C:\Users\John)以从那里查看子文件夹列表返回总和大小为 0,计数工作正常。

同样与我的预期相反,当我使用两个单独的 Get-ChildItem 命令时,脚本似乎只返回正确的值,因为两个 Get-ChildItem 返回的 .Sum 和 .Count 属性不同。

第一个 Get-ChildItem(即 $itemsInfo1)似乎返回了文件夹中正确的项目数,但大小的总和不正确。第二个Get-ChildItem(即$itemsInfo2)似乎返回文件夹中不正确的项目计数(只计算文件而不是文件夹?)但正确(呃)大小的总和。

我使用 GUI > 文件夹属性来确定“正确”的计数和大小应该是多少。

标签: powershell-3.0

解决方案


不正确的计数问题与丢失隐藏文件有关。即第一个 Get-ChildItem cmdlet 不包括-Force.

更改第一行以$profiles = Get-ChildItem "C:\Users" -Force解决我的问题。

要获取所有项目的计数,然后计算所有具有“长度”的项目的总和,需要两个单独的(每个变量一个)Get-ChildItem cmdlet,因为每个 cmdlet 只计算指定属性的唯一完全匹配项。


推荐阅读