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?

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;

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;

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

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}

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}}

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.