2013-02-05 16 views
41

Sto provando a scrivere uno script PowerShell molto semplice per fornirmi il numero totale di elementi (sia file che cartelle) in una determinata cartella (c:\MyFolder). Ecco quello che ho fatto:Contare gli elementi in una cartella con PowerShell

Write-Host (Get-ChildItem c:\MyFolder).Count; 

Il problema è, che se ho 1 o 0 oggetti, il comando non funziona --- restituisce nulla.

Qualche idea?

risposta

68

Si dovrebbe usare Measure-Object per contare le cose. In questo caso sarebbe simile:

Write-Host (Get-ChildItem c:\MyFolder | Measure-Object).Count; 

o se questo è troppo lungo

Write-Host (dir c:\MyFolder | mo).Count; 

e in PowerShell 4.0 utilizzare i measure alias anziché mo

Write-Host (dir c:\MyFolder | measure).Count; 
+0

@Stanley_de_boer La tua strada è migliore ... grazie! – HydroPowerDeveloper

18

finalmente ho trovato questo link:

https://blogs.perficient.com/microsoft/2011/06/powershell-count-property-returns-nothing/

Bene, si scopre che si tratta di un capriccio causata proprio perché ci era solo un file nella directory. Alcune ricerche hanno rivelato che nel caso , PowerShell restituisce un oggetto scalare invece di un array. Questo oggetto non ha una proprietà count, quindi non c'è nulla da recuperare .

La soluzione - PowerShell forza per restituire un array con il simbolo @:

Write-Host @(Get-ChildItem c:\MyFolder).Count; 
+2

Perfetto, grazie. Trovo fastidioso quando i commandlet cercano di essere "utili" e variare il loro tipo di ritorno. –

16

Se è necessario accelerare il processo (per esempio contando 30k o più file) quindi vorrei andare con qualcosa di simile ..

$filepath = "c:\MyFolder" 
$filetype = "*.txt" 
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count 
+0

Questo è un ordine di grandezza più veloce! Grazie. Avevo una cartella con oltre 29K file al suo interno, e questo metodo ha restituito il conteggio alla velocità del mio dito sollevato dal tasto RETURN. – xizdaqrian

4

Solo Files

Get-ChildItem D:\ -Recurse -File | Measure-Object | %{$_.Count} 

solo le cartelle

Get-ChildItem D:\ -Recurse -Directory | Measure-Object | %{$_.Count} 

Sia

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count} 
+1

Sul primo, come dovrei cercare tutti i file jpg e png? –

+2

@AlLelopath '' Get-ChildItem D: \ -Recurse -File -Include * .jpg, *. Png | Measure-Object | % {$ _. Conte} '' –

1

ricorsivamente contare i file nelle directory in PowerShell 2.0

ls -rec | ? {$_.mode -match 'd'} | select FullName, @{N='Count';E={(ls $_.FullName | measure).Count}} 
0

in PowerShell è possibile utilizzare i comandi severals, per la ricerca di questo comandi cifre: Get-Alias;

Così i cammands lattina da utilizzare sono:

write-host (ls MydirectoryName).Count 

o

write-host (dir MydirectoryName).Count 

o

write-host (Get-ChildrenItem MydirectoryName).Count 
Problemi correlati