Ich versuche, die Dateien in allen Unterordnern in einem Verzeichnis zu zählen und sie in einer Liste anzuzeigen.
Zum Beispiel der folgende dirtree:
%Vor%Sollte als Ausgabe geben:
%Vor%Ich begann mit dem folgenden:
%Vor%Jetzt habe ich eine Frage: Warum ist meine Funktion nicht rekursiv?
So etwas sollte funktionieren:
%Vor%dir -recurse
listet alle Dateien im aktuellen Verzeichnis auf und pipettiert (|) das Ergebnis nach ?{ $_.PSIsContainer }
filtert nur die Verzeichnisse und leitet die Ergebnisliste erneut an %{ Write-Host $_.FullName (dir $_.FullName | Measure-Object).Count }
ist eine foreach-Schleife, die für jedes Mitglied der Liste ($ _) den vollständigen Namen und das Ergebnis des folgenden Ausdrucks anzeigt (dir $_.FullName | Measure-Object).Count
stellt eine Liste von Dateien unter dem Pfad $ _. FullName zur Verfügung und zählt Mitglieder über Messobjekt
?{ ... }
ist ein Alias für Where-Object
%{ ... }
ist ein Alias für foreach Ähnlich wie Davids Lösung funktioniert dies in Powershell v3.0 und verwendet keine Aliase, falls jemand mit ihnen nicht vertraut ist
%Vor%Antwortaufschlag
Basierend auf einem Kommentar über die Einhaltung Ihrer Funktions- und Schleifenstruktur biete ich Folgendes an. Hinweis : Ich befürworte diese Lösung nicht, da sie hässlich ist und die eingebauten Cmdlets dies sehr gut handhaben . Wie auch immer ich helfen möchte, hier ist ein Update Ihres Skripts.
%Vor% Zählen Sie für jedes $singleDirectory
alle Dateien mit $count
(die vor der nächsten Unterschleife zurückgesetzt wird) und geben Sie jedes Ergebnis in eine Hash-Tabelle aus. Am Ende geben Sie die Hashtabelle als String aus. In Ihrer Frage haben Sie so ausgesehen, als wollten Sie eine Objektausgabe statt eines geraden Textes.
Nun, so wie Sie es tun, muss das gesamte Get-ChildItem
Cmdlet abgeschlossen sein, bevor die foreach
Schleife mit der Iteration beginnen kann. Bist du sicher, dass du lange genug wartest? Wenn Sie das gegen sehr große Verzeichnisse (wie C :) ausführen, wird es ziemlich lange dauern.
Edit: Sie haben vorher nach einer Möglichkeit gefragt, wie Sie Ihre Aufgabe machen können, um das zu tun, was Sie fragen. Hier können Sie loslegen.
%Vor%Die foreach-Schleife ruft nur Verzeichnisse ab, da das alles ist, was uns interessiert. Dann wird innerhalb der Schleife ein benutzerdefiniertes Objekt für jede Iteration mit dem vollständigen Pfad des Ordners und der Anzahl der Elemente innerhalb des Ordners erstellt. p>
Beachten Sie auch, dass dies nur in PowerShell 3.0 oder neuer funktioniert, da der Parameter -directory
in 2.0 nicht existiert
Meine Version - etwas sauberer und Inhalte in eine Datei dumps
Original - Dateien in Unterordnern rekursiv zählen
Zweite Komponente - Elemente in einem Ordner mit PowerShell zählen
%Vor%Tags und Links powershell recursion