powershell-3.0 - 文件夹结构中的项目计数和大小
问题描述
计数和测量文件夹内容
尝试编写脚本检查目录结构中的大型文件夹。
我的测试脚本似乎只能在顶级文件夹上准确运行,并且只能使用两个单独的 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 > 文件夹属性来确定“正确”的计数和大小应该是多少。
解决方案
不正确的计数问题与丢失隐藏文件有关。即第一个 Get-ChildItem cmdlet 不包括-Force
.
更改第一行以$profiles = Get-ChildItem "C:\Users" -Force
解决我的问题。
要获取所有项目的计数,然后计算所有具有“长度”的项目的总和,需要两个单独的(每个变量一个)Get-ChildItem cmdlet,因为每个 cmdlet 只计算指定属性的唯一完全匹配项。
推荐阅读
- swift - 如何在 Xcode 11 中将视图按钮/标签连接到控制器文件?
- ios - 如何使用 XCUItest 设置 UserDefaults
- angular - 如何在Angular 8中使用登录用户名创建动态网址
- javascript - JSON 对象属性转换为 JSON 对象名称
- java - Java Swing 将 GUI 与业务逻辑分离
- three.js - ThreeJS 开门动画
- java - 使用 POI 访问旧 excel .xls 文件的单元格
- amp-html - 如何使用 AMP-Carousel 加载(更改)图像 src?(用于电子邮件的 AMP)
- javascript - GET 请求没有显示错误
- dockerfile - 将 Dockerfile 中的 jboss/base-jdk 8 更新为 11