2012-10-17 19 views
5

Qualcuno conosce un comando/script powershell 2.0 per contare tutte le cartelle e le sottocartelle (ricorsiva, nessun file) in una cartella specifica (ad esempio il numero di tutte le sottocartelle in C: \ folder1 \ folder2)?Conteggio delle cartelle con PowerShell

Inoltre, ho anche bisogno del numero di tutte le cartelle "foglia". in altre parole, voglio solo contare le cartelle, che non hanno sottolivelli.

risposta

5

È possibile utilizzare get-childitem -recurse per ottenere tutti i file e le cartelle nella cartella corrente.

Inserire in Where-Object per filtrare solo quei file che sono contenitori.

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

come un one-liner:

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

Non funziona per me. L'output è solo vuoto – Alex

2

Questo è un buon punto di partenza:

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

Tuttavia, ho il sospetto che questo includerà .zip file nel conteggio. Io prova che e cerco di inviare un aggiornamento ...

EDIT: hanno confermato che i file zip sono non contato come contenitori. Quanto sopra dovrebbe andare bene!

6

In PowerShell 3.0 è possibile utilizzare l'interruttore di repertorio:

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

Per rispondere alla seconda parte della tua domanda, di ottenere la foglia numero di cartelle, basta modificare la clausola where object per aggiungere una ricerca non ricorsiva di ogni directory, ottenendo solo quelle che restituiscono un conteggio di 0:

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

sembra un po 'più pulito se è possibile utilizzare PowerShell 3.0:

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

Un'altra opzione:

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

ottenere gli elementi percorso bambino con l'opzione ricorso, tubo per filtrare solo contenitori, tubo di nuovo per misurare il numero di articoli

((get-childitem -Path $the_path -recurse | where-object { $_.PSIsContainer }) | measure).Count 
Problemi correlati