2012-10-17 23 views
5

Czy ktoś zna polecenie/skrypt, aby zliczyć wszystkie foldery i podfoldery (rekursywne, bez plików) w określonym folderze (np. Liczbę wszystkich podfolderów w folderze C: \ folder1 \ folder2), pod numerem powershell 2.0?Zliczanie folderów za pomocą Powershell

Ponadto potrzebuję również liczby wszystkich "liści" folderów. innymi słowy, chcę tylko policzyć foldery, które nie mają podolderów.

Odpowiedz

5

Możesz użyć get-childitem -recurse, aby uzyskać wszystkie pliki i foldery w bieżącym folderze.

Przełóż ten filtr na Where-Object, aby przefiltrować tylko te pliki, które są kontenerami.

$files = get-childitem -Path c:\temp -recurse 
$folders = $files | where-object { $_.PSIsContainer } 
Write-Host $folders.Count 

Jako jedną wkładką:

(get-childitem -Path c:\temp -recurse | where-object { $_.PSIsContainer }).Count 
+0

Nie działa dla mnie. Wynik jest pusty – Alex

2

Jest to dość dobry punkt wyjścia:

(gci -force -recurse | where-object { $_.PSIsContainer }).Count 

Jednak podejrzewam, że będzie to .zip pliki w liczbie. Będę testować że i spróbować odpowiedzieć aktualizacji ...

EDIT: potwierdziły, że pliki zip są nie liczony jako pojemniki. Powyższe powinno być w porządku!

6

W PowerShell 3.0 można wykorzystać przełącznik katalog:

(Get-ChildItem -Path <path> -Directory -Recurse -Force).Count 
2

Aby odpowiedzieć na drugą część pytania, na uzyskanie liścia liczba folderów, po prostu zmodyfikuj klauzulę where, aby dodać nierekurencyjne przeszukiwanie każdego katalogu, pobierając tylko te, które zwracają liczbę 0:

(dir -rec | where-object{$_.PSIsContainer -and ((dir $_.fullname | where-object{$_.PSIsContainer}).count -eq 0)}).Count 

wygląda trochę czystsze, jeśli można użyć PowerShell 3.0:

(dir -rec -directory | where-object{(dir $_.fullname -directory).count -eq 0}).count 
1

Inna opcja:

(ls -force -rec | measure -inp {$_.psiscontainer} -Sum).sum 
0

Get elementy ścieżka dziecko z regresem opcji rura to filtrować tylko pojemniki, Rura ponownie do pomiaru liczby sztuk

((get-childitem -Path $the_path -recurse | where-object { $_.PSIsContainer }) | measure).Count 
Powiązane problemy