Powershell-如何以递归方式添加文件数量以及包含文件的文件夹的大小

Powershell-如何以递归方式添加文件数量以及包含文件的文件夹的大小

我有以下 Powerrshell 脚本,它以递归方式告诉我文件夹的大小。我尝试添加该文件夹中构成大小的文件的“计数”,但得到的是一列空白数据

有什么建议么?

Get-ChildItem -path "\\location\of\drive" -Directory -Recurse | 
Select-Object FullName | 
ForEach-Object -Process{New-Object -TypeName PSObject -Property @{Name =$_.FullName;Size = (Get-ChildItem -path $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | 
Measure-Object -Property Length -Sum ).Sum/1kb}} | 
Select-Object Name, Count, @{Name="Size(KB)";Expression={("{0:N2}" -f($_.Size))}}

我目前得到以下内容,但如上所述,我希望计数列显示文件的实际数量

Name                     Count Size(KB) 
----                     ----- -------- 
\\NETWORKNAME\2019\08\01       34,490.13
\\NETWORKNAME\2019\08\02       37,585.78
\\NETWORKNAME\2019\08\03       7,978.57 
\\NETWORKNAME\2019\08\04       8,327.71 
\\NETWORKNAME\2019\08\05       37,635.42
\\NETWORKNAME\2019\08\06       36,888.54
\\NETWORKNAME\2019\08\07       34,933.20
\\NETWORKNAME\2019\08\08       39,062.42
\\NETWORKNAME\2019\08\09       71,722.52
\\NETWORKNAME\2019\08\10       9,754.89 
\\NETWORKNAME\2019\08\11       8,930.47 
\\NETWORKNAME\2019\08\12       43,438.02
\\NETWORKNAME\2019\08\13       48,104.64
\\NETWORKNAME\2019\08\14       39,436.49
\\NETWORKNAME\2019\08\15       37,975.93
\\NETWORKNAME\2019\08\16       32,366.63
\\NETWORKNAME\2019\08\17       6,929.40 
\\NETWORKNAME\2019\08\18       6,834.03 
\\NETWORKNAME\2019\08\19       53,435.72
\\NETWORKNAME\2019\08\20       43,188.17
\\NETWORKNAME\2019\08\21       42,531.59
\\NETWORKNAME\2019\08\22       43,260.43
\\NETWORKNAME\2019\08\23       38,371.61
\\NETWORKNAME\2019\08\24       9,241.68 
\\NETWORKNAME\2019\08\25       8,098.56 
\\NETWORKNAME\2019\08\26       8,887.18 
\\NETWORKNAME\2019\08\27       35,637.54
\\NETWORKNAME\2019\08\28       38,867.32
\\NETWORKNAME\2019\08\29       37,116.23
\\NETWORKNAME\2019\08\30       39,129.28
\\NETWORKNAME\2019\08\31       8,403.53 

答案1

一般情况下,我建议始终使用所有属性进行循环,并在循环中执行代码逻辑。此外,将命令的返回结果保存到变量中,以便能够用它执行多项操作,例如获取大小和计数。

另外,你的代码格式确实不太好。尽量以可读的方式格式化,当你写了一些复杂的东西,一年后需要编辑其中的内容时,你会感谢你自己。

# Get Top-Level Directories recursive and loop
Get-ChildItem -path "C:\install" -Directory -Recurse | ForEach-Object {

    # Get Sub files & folders and calculate stuff that is needed
    $SubFiles = Get-ChildItem -path $_.FullName -Force -Recurse
    $Size = ($SubFiles | Measure-Object -Property Length -Sum -ErrorAction 0).Sum/1kb
    $FileCount = $SubFiles.count

    # Return the output in the format you want to
    [PSCustomObject]@{
        "Name" = $_.FullName
        "Count" = $FileCount
        "Size(KB)" = "{0:N2}" -f $Size
    }
}

顺便说一句。如果您的某个文件夹有多个子文件夹,它将针对每个子文件夹多次扫描该目录 - 这对我来说没有意义。也许您只想要顶级文件夹的大小和数量?如果是这样,请-recurse在第一行代码中删除。

相关内容