Zählen Sie mit PowerShell Elemente in einem Ordner

89

Ich versuche, ein sehr einfaches PowerShell-Skript zu schreiben, um die Gesamtzahl der Elemente (sowohl Dateien als auch Ordner) in einem bestimmten Ordner ( c:\MyFolder) anzugeben . Folgendes habe ich getan:

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

Das Problem ist, dass wenn ich 1 oder 0 Elemente habe, der Befehl nicht funktioniert - er gibt nichts zurück.

Irgendwelche Ideen?

HydroPowerDeveloper
quelle

Antworten:

146

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

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

oder wenn das zu lang ist

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

Verwenden Sie in PowerShell 4.0 den measureAlias ​​anstelle vonmo

Write-Host (dir c:\MyFolder | measure).Count;
Stanley De Boer
quelle
Wie erhalte ich die Anzahl aller Ordner in einem bestimmten Ordner?
Mihir
36

Ich habe endlich diesen Link gefunden:

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

Nun, es stellt sich heraus, dass dies eine Eigenart ist, die genau deshalb verursacht wurde, weil sich nur eine Datei im Verzeichnis befand. Einige Suchanfragen haben ergeben, dass PowerShell in diesem Fall ein skalares Objekt anstelle eines Arrays zurückgibt. Dieses Objekt verfügt nicht über eine count-Eigenschaft, sodass nichts abgerufen werden kann.

Die Lösung - PowerShell zwingen, ein Array mit dem @Symbol zurückzugeben:

Write-Host @( Get-ChildItem c:\MyFolder ).Count;
HydroPowerDeveloper
quelle
4
Perfekt danke. Ich finde es ärgerlich, wenn Commandlets versuchen, "hilfreich" zu sein und ihren Rückgabetyp zu variieren.
Paul Suart
33

Wenn Sie den Prozess beschleunigen müssen (zum Beispiel 30.000 oder mehr Dateien zählen), würde ich so etwas tun.

$filepath = "c:\MyFolder"
$filetype = "*.txt"
$file_count = [System.IO.Directory]::GetFiles("$filepath", "$filetype").Count
dariusw
quelle
Das ist eine Größenordnung schneller! Vielen Dank. Ich hatte einen Ordner mit über 29.000 Dateien darin, und diese Methode gab die Zählung so schnell zurück, wie mein Finger von der RETURN-Taste abgehoben war.
Xizdaqrian
Sie können dies mit [System.IO.Directory]::GetFiles("$filepath", "$filetype",1)Siehe hier
Cody G
14

Nur Dateien

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

Nur Ordner

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

Beide

Get-ChildItem D:\ -Recurse | Measure-Object | %{$_.Count}
dhcgn
quelle
2
Wie würde ich beim ersten Mal nach allen JPG- und PNG-Dateien suchen?
Al Lelopath
4
@ AlLelopathGet-ChildItem D:\ -Recurse -File -Include *.jpg,*.png | Measure-Object | %{$_.Count}
dhcgn
Hallo @dhcgn Ratschläge zu diesem Stackoverflow.com/questions/54916917/…
RickyProgrammer
1

Zählen Sie rekursiv Dateien in Verzeichnissen in PowerShell 2.0

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

In Powershell können Sie mehrere Befehle verwenden, um nach dieser Befehlsziffer zu suchen: Get-Alias ;

Die Cammands, die die Dose verwenden kann, sind:

write-host (ls MydirectoryName).Count

oder

write-host (dir MydirectoryName).Count

oder

write-host (Get-ChildrenItem MydirectoryName).Count
Fábio Rodrigues Fonseca
quelle
0

Zählen der Nummer eines bestimmten Dateityps in einem Ordner. Das Beispiel ist das Zählen von MP3-Dateien auf Laufwerk F:.

( Get-ChildItme F: -Filter *.mp3 - Recurse | measure ).Count

Getestet in 6.2.3, sollte aber> 4 funktionieren.

OrigamiEye
quelle