2014-10-21 15 views
11

ho trovato molte risorse che utilizzano il seguente script per ottenere le dimensioni delle cartellePowershell dimensioni della cartella di cartelle senza sottodirectory sfogliare

$colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object) 
foreach ($i in $colItems) 
    { 
     $subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum) 
     $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum/1MB) + " MB" 
    } 

Il problema è che elenca anche le sottodirectory cioè:

c:\test\1 -- 10mb 
c:\test\1\folder -- 10mb 
c:\test\1\folder\deep -- 5mb 
c:\test\1\folder\tuna -- 5mb 
c:\test\2 -- 20bm 
c:\test\2\folder -- 20mb 
c:\test\2\folder\deep -- 10mb 
c:\test\2\folder\tuna -- 10mb 

Penso che tu sappia vedere dove sto andando. Quello che sto cercando è solo i risultati della cartella principale ... SO:

c:\test\1 -- 10mb 
c:\test\2 -- 20mb 

Come può essere realizzato con PowerShell? ....

+2

Dai un'occhiata a [Hey, Scripting Guy! Ottenere dimensioni di directory in PowerShell] (http://blogs.technet.com/b/heyscriptingguy/archive/2012/05/25/getting-directory-sizes-in-powershell.aspx). Lo script Get-DirStats.ps1 a cui si fa riferimento fa ciò che si sta chiedendo per impostazione predefinita. –

+1

Penso che tu stia cercando qualcosa del genere: http://jdhitsolutions.com/blog/2013/05/getting-top-level-folder-report-in-powershell/. – Neolisk

+2

Se '$ startFolder' è' c: \ test' non potresti semplicemente rimuovere '-recurse'? – Matt

risposta

16

È necessario ottenere la dimensione del contenuto totale di ogni directory in modo ricorsivo per l'output. Inoltre, è necessario specificare che i contenuti che si stanno acquisendo per misurare non sono directory o si rischiano errori (poiché le directory non hanno un parametro Length).

Ecco lo script modificato per l'uscita che stai cercando:

$colItems = Get-ChildItem $startFolder | Where-Object {$_.PSIsContainer -eq $true} | Sort-Object 
foreach ($i in $colItems) 
{ 
    $subFolderItems = Get-ChildItem $i.FullName -recurse -force | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object Sum 
    $i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum/1MB) + " MB" 
} 
+0

Se lo rimuovo non calcola per le sottodirectory – user3566297

+0

Sei corretto - ha aggiornato la risposta – Kohlbrr

+0

Perfetto, grazie mille. Quindi sono un po 'nuovo allo stackoverflow, è stato sbagliato aggiornare la mia domanda originale con quella che pensavo fosse la risposta? – user3566297

6

Questa semplice soluzione ha funzionato per me pure.

powershell -c "Get-ChildItem -Recurse 'directory_path' | Measure-Object -Property Length -Sum" 
-2

Interessante come potente ma come impotente PS può essere nello stesso tempo, proveniente da un apprendimento PS Nix. dopo l'installazione di crgwin/gitbash, è possibile eseguire qualsiasi combinazione in un unico comando:

dimensioni della cartella corrente: du -sk.

dimensioni di tutti i file e le cartelle in directory corrente du -sk *

dimensioni di tutte le sottocartelle (comprese le cartelle correnti) trovare ./ tipo d exec du -sk {} \;

Problemi correlati