Contare gli elementi in una cartella con PowerShell

Sto provando a scrivere uno script PowerShell molto semplice per darmi il numero totale di elementi (sia file che cartelle) in una data cartella ( c:\MyFolder ). Ecco cosa ho fatto:

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

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

Qualche idea?

Dovresti usare Measure-Object per contare le cose. In questo caso assomiglierebbe a:

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

o se è troppo lungo

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

e in PowerShell 4.0 utilizzare l’alias measure invece di mo

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

Ho finalmente trovato questo link:

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

Bene, si scopre che questo è un problema causato proprio perché c’era un solo file nella directory. Alcune ricerche hanno rivelato che in questo caso, PowerShell restituisce un object scalare invece di un array. Questo object non ha una proprietà count, quindi non c’è nulla da recuperare.

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

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

Se è necessario velocizzare il processo (ad esempio contando 30 o più file), andrei con qualcosa di simile ..

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

Solo file

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

Solo cartelle

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

Entrambi

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

Conta ricorsivamente i file nelle directory in PowerShell 2.0

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

In PowerShell puoi usare i comandi di sever, per cercare i numeri di questo comando: Get-Alias ;

Quindi i cammands che possono usare sono:

 write-host (ls MydirectoryName).Count 

o

 write-host (dir MydirectoryName).Count 

o

 write-host (Get-ChildrenItem MydirectoryName).Count