2014-10-21 13 views
11

znalazłem kilka zasobów, które używają następujący skrypt, aby uzyskać folderu rozmiarachPowerShell rozmiar folderu folderów bez wymieniających podkatalogach

$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" 
    } 

Problem z tym jest to również listę podkatalogów, tj:

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 

Myślę, że wiesz, gdzie idę. Co szukam jest zaledwie Wyniki folderu nadrzędnego ... SO:

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

Jak można to osiągnąć z PowerShell? ....

+2

Spójrz na [Hej, Skrypciarze! Uzyskiwanie wielkości katalogów w PowerShell] (http://blogs.technet.com/b/heyscriptingguy/archive/2012/05/25/getting-directory-sizes-in-powershell.aspx). Skrypt Get-DirStats.ps1, o którym mowa, wykonuje domyślnie to, o co prosisz. –

+1

Myślę, że szukasz czegoś takiego: http://jdhitsolutions.com/blog/2013/05/getting-top-level-folder-report-in-powershell/. – Neolisk

+2

Jeśli '$ startFolder' to' c: \ test', czy nie możesz usunąć '-recurse'? – Matt

Odpowiedz

16

Musisz uzyskać całkowity rozmiar zawartości każdego katalogu rekursywnie na wyjściu. Musisz również określić, że zawartość, którą zgrywasz, aby zmierzyć, nie jest katalogiem lub ryzykujesz błędami (ponieważ katalogi nie mają parametru Length).

Oto skrypt zmodyfikowane do wyjścia, którego szukasz:

$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

Po usunięciu nie obliczyć dla podkatalogów – user3566297

+0

Masz rację - zaktualizowano odpowiedź – Kohlbrr

+0

Doskonale, dziękuję bardzo. TAK, jestem trochę nowy w stackoverflow, czy błędem było aktualizowanie mojego pierwotnego pytania o to, co uważałem za odpowiedź? – user3566297

6

To proste rozwiązanie pracował dla mnie.

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

Ciekawe, jak potężne, ale jak bezbronne PS może być w tym samym czasie, pochodzących z PS uczenia Nix. po instalacji crgwin/gitbash można wykonać dowolną kombinację w jednym poleceniu:

rozmiar bieżącego folderu: du -sk.

rozmiar wszystkich plików i folderów na podstawie aktualnego katalogu du -SK *

rozmiar wszystkich podfolderów (łącznie z bieżącymi folderów) znaleźć ./ -type d -exec du -SK {} \;

Powiązane problemy