2013-02-05 19 views
41

Ich versuche, ein sehr einfaches PowerShell-Skript zu schreiben, um mir die Gesamtzahl der Elemente (Dateien und Ordner) in einem bestimmten Ordner (c:\MyFolder) zu geben. Hier ist, was ich getan habe:Elemente in einem Ordner mit PowerShell zählen

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

Das Problem ist, dass, wenn ich 1 oder 0 Produkte, wird der Befehl nicht funktioniert --- es gibt nichts zurück.

Irgendwelche Ideen?

Antwort

68

Sie Measure-Object Dinge zu zählen, verwenden sollten. In diesem Fall würde es wie folgt aussehen:

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

oder wenn das zu lang ist

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

und in Powershell 4.0 verwenden, um die measure alias statt mo

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

@Stanley_de_boer Ihr Weg ist besser ... danke! – HydroPowerDeveloper

18

Schließlich fand ich diesen Link:

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

Nun, es stellt sich heraus, dass dies eine Marotte gerade verursacht, weil es nur eine Datei im Verzeichnis war. Eine Suche ergab, dass PowerShell in diesem Fall in ein skalares Objekt anstelle eines Arrays zurückgibt. Dieses Objekt hat keine count -Eigenschaft, so dass nicht abgerufen werden kann.

Die Lösung - Kraft Powershell ein Array mit dem @ Symbol zurückzukehren:

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

Perfect, danke. Ich finde es nervig, wenn Kommandos versuchen und "hilfreich" sind und ihren Rückgabetyp variieren. –

16

Wenn Sie zu beschleunigen brauchen up den Prozess (zum Beispiel 30k oder mehr Dateien zählen) dann würde ich mit so etwas gehen ..

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

Das ist eine Größenordnung schneller! Vielen Dank. Ich hatte einen Ordner mit über 29K-Dateien darin, und diese Methode gab die Zählung so schnell zurück, wie mein Finger von der RETURN-Taste abhob. – xizdaqrian

4

Nur Dateien

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

Folders Nur

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

Beide

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

Auf der ersten, wie würde ich nach allen JPG-und PNG-Dateien suchen? –

+2

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

1

Recursively Dateien in Verzeichnissen 2 in Powershell zählen.0

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

In Powershell können Sie severals Befehle, für die Suche nach diesen Befehlen Ziffer zu verwenden: Get-Alias;

So sind die cammands die Dose zu verwenden sind:

write-host (ls MydirectoryName).Count 

oder

write-host (dir MydirectoryName).Count 

oder

write-host (Get-ChildrenItem MydirectoryName).Count 
Verwandte Themen