Frage Windows-Eingabeaufforderung: Wie erhält man die Anzahl aller Dateien im aktuellen Verzeichnis?


Welchen Befehl würden Sie verwenden? cmd.exe um die Anzahl der Dateien im aktuellen Verzeichnis zu finden?

Gibt es hier eine Powershell-Option?

Aktualisieren: Ich hatte gehofft zu vermeiden dir, wie ich weiß, gibt es mehr als 10.000 Dateien im aktuellen Verzeichnis. Wollte die Aufzählungsausgabe in das cmd-Fenster vermeiden. Vielen Dank!


23
2018-02-08 17:12


Ursprung




Antworten:


Wenn du es mit machen willst cmd, dann ist das Folgende der triviale Weg, es zu tun:

set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%

Das nimmt die Befehlszeile an. In einer Batch-Datei würden Sie tun

@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal

was die Dinge ein bisschen schöner macht. Sie können das löschen >nul in einer Charge, seit set /a Das Ergebnis wird nicht angezeigt, wenn es aus einer Batchdatei ausgeführt wird - dies geschieht direkt über die Befehlszeile. Außerdem % Anmelden in der for Schleife muss verdoppelt werden.

Ich habe schon einige Fälle gesehen, in denen Leute mit raffinierten Tricks experimentieren find /c. Sein sehr vorsichtig mit denen, da verschiedene Dinge das brechen können.

Häufige Fehler:

  1. Verwenden find /c /v und versuche etwas zu finden, das niemals in einem Dateinamen enthalten ist, wie z ::. Gewohnheit. Arbeit. Zuverlässig. Wenn das Konsolenfenster auf Raster-Schriftarten eingestellt ist, dann Sie können hol dir diese Zeichenkombination. Ich kann Zeichen in einen Dateinamen wie einschließen :, ?usw., zum Beispiel in ihren Vollbreiten-Varianten, die dann in ihre normalen ASCII-Gegenstücke umgewandelt werden, die dies brechen werden. Wenn Sie eine genaue Zählung benötigen, versuchen Sie es nicht.

  2. Verwenden find /c und versuche etwas zu finden, das ist immer in einem Dateinamen enthalten. Offensichtlich der Punkt (.) ist eine schlechte Wahl. Eine andere Antwort schlägt vor

    dir /a-d | find /c ":"
    

    Das nimmt mehrere Dinge über das Gebietsschema des Benutzers an, von denen nicht alle garantiert wahr sind (ich habe einen Kommentar hinterlassen, der die Probleme dort beschreibt), und gibt ein Ergebnis zu viel zurück.

Im Allgemeinen möchten Sie verwenden find auf dir /b was alle non-filename sachen wegschneidet und auf diese weise zaunpostfehler vermeidet.

Die elegante Variante wäre also:

dir /b /a-d | find /c /v ""

welches zuerst alle Dateinamen, jeweils eine Zeile ausgibt. Und dann zählen Sie alle Zeilen dieser Ausgabe, die nicht leer sind. Da der Dateiname nicht leer sein kann (es sei denn, ich verpasse etwas, aber Unicode stolpert nicht nach meinen Tests).


26
2018-02-09 17:31



+1 Das war genau das, wonach ich gesucht habe. Danke JR! - p.campbell
Kleine Änderung, um die erste Version alle eine Zeile zu machen: (setze Count = 0 & für% x in (*) do @ (setze / a count + = 1> nul)) && echo% count% - Jason Massey
+1 für dir /b /a-d | find /c /v "" - Arvo Bowen
Diese Lösung funktioniert nicht gut, wenn Millionen von Dateien vorhanden sind. Es läuft "für immer" - eine bessere Lösung wird unten veröffentlicht, die "in Sekunden" mit PS und [System.IO.Directory] :: GetFiles ($ path) .Count läuft - ripvlan
@jason, das würde wahrscheinlich seither scheitern %count% ist zur Parsezeit erweitert. - Joey


Bittet und ihr werdet erhalten: http://technet.microsoft.com/en-us/library/ee692796.aspx

Zählen der Anzahl der Elemente in a   Mappe

Nun, was weißt du: es sieht so aus   Die Sonne kommt endlich heraus, was   bedeutet, es ist fast Zeit für uns zu gehen.   Bevor wir es tun, zeigen wir es Ihnen   ein letzter kleiner Trick mit dem   Get-ChildItem-Cmdlet Manchmal ...... du   Ich muss nicht wirklich viel darüber wissen   die Dateien in einem Ordner; alles was du wirklich bist   muss wissen, wie viele Dateien (wenn   any) kann in einer bestimmten gefunden werden   Mappe. So geht's schnell   Zählen Sie die Anzahl der Dateien in einem Ordner:

(Get-ChildItem C:\Scripts).Count

Was machen wir hier? Wir sind einfach   Verwenden von Get-ChildItem zum Zurückgeben von a   Sammlung aller Artikel gefunden in   der Ordner C: \ Scripts; weil das ist   eine Sammlung, alles, was wir tun müssen, ist   Echo den Wert des Count zurück   Eigenschaft, die uns die Anzahl der angibt   Artikel in der Sammlung. Beachten Sie die Verwendung   in Klammern: wir schließen die   Get-ChildItem-Befehl in Klammern   um sicherzustellen, dass Windows PowerShell   zuerst ergreift die Sammlung und nur   dann hallt der Wert des zurück   Count-Eigenschaft für diese Sammlung

Und sicher, Sie können einen Filter hinzufügen   beim Aufruf von Get-ChildItem. Müssen   wissen, wie viele .PS1 Dateien in der   Ordner C: \ Skripte? Alles klar:

(Get-ChildItem C:\Scripts -filter "*.ps1").Count

FYI .. Ich googelte "Powershell Count Files".


17
2018-02-08 17:35



Sie müssen eine Dateispezifikation hinzufügen, damit die Zählung tatsächlich Dateien zählt, wie im zweiten Beispiel - Jim B
Nur um klar zu sein (Get-ChildItem C: \ Scripts) .Count wird NICHT die Anzahl der Dateien in einem Ordner zurückgeben, es wird die Anzahl der OBJECTS in einem Ordner zurückgeben. Sie müssen eine Filter- oder Dateispezifikation hinzufügen, um Dateien zählen zu können. probiere (gci) .count und dir aus dem root deines C: laufwerks und betrachte den unterschied in den zahlen - Jim B
Wenn Sie auch Dateien in den Unterordnern zählen möchten, verwenden Sie von demselben Link aus: (Get-ChildItem -recurse -filter "*.ps1").Count - jrsconfitto
Funktioniert nicht, wenn es genau eine Datei gibt, müssen Sie folgendes tun: $ filecount = @ (get-childitem $ directory -filter ".") .Count. Von dem, was ich an anderer Stelle gelesen habe, ist es kein Array, wenn es eine Datei gibt. - NealWalters
@NealWalters: Das war bis PowerShell v3 korrekt. Seitdem ist es egal. - Joey


dir /a-d | find "File(s)"

Ein Wort der Warnung über die Verwendung von PowerShell für einfache Dateioperationen wie diese - es ist unglaublich langsam im Vergleich zu cmd.exe, besonders über Netzwerkverbindungen oder wenn es Tausende von Dateien im Verzeichnis gibt. Sehen dieser Forenbeitrag Für mehr Information.


8
2018-04-07 02:37



Wenn Ihr System in einer anderen Sprache als Englisch ist, haben Sie damit Probleme. - WalyKu


dir gibt Ihnen die Gesamtzahl der Dateien am unteren Rand.


7
2018-02-08 17:14



1 Up Kumpel, du schlägst mich zu diesem :) - dyasny
und um die Kosten zu vermeiden, alle Zeilen durch das Cmd-Fenster scrollen zu sehen ... minimieren Sie es, es wird eine Menge schneller arbeiten. - gbjbaanb
oder nur dir > file .. ahh ich vermisse POSIX - lorenzog
@lorenz: Irgendein Grund warum dir > file sollte in Windows nicht funktionieren? Die Ausgabeumleitung ist nicht gerade magisch, weißt du? - Joey
@Johannes: Es funktioniert tatsächlich! Ich vermisse POSIX, weil Sie "nur" tun können dir | grep (something) um das langsame Schreiben auf dem Bildschirm zu vermeiden, das die Dinge verlangsamt (und es insgesamt minimiert). - lorenzog


Die schnellste Methode, die ich gefunden habe, besteht darin, Folgendes in der PS-Konsole auszuführen.

[System.IO.Directory]::GetFiles($path).Count

Dabei ist $ path ein lokaler Pfad oder eine UNC-Freigabe.


7
2018-05-30 10:58



Sieh dir das an. Eine gute Antwort erschien fast 7,5 Jahre nachdem die Frage gestellt wurde! - p.campbell
Arbeitete auf einem virtuellen Server in einem Verzeichnis mit über 2,1 Millionen Dateien, um die Zählung in etwa 10 Sekunden für mich zurückzugeben. Dies sollte die richtige Antwort sein. - DarrenMB
Das ist wirklich die beste Antwort. Ich hatte einen Ordner mit 4,5 Millionen Dateien darin und diese Methode zählte sie in einigen Sekunden. Methoden in anderen vorgeschlagenen Antworten liefen für einige Minuten, bevor ich sie aufgab. - ripvlan


Zählen Sie nur die Zeilen aus der dir / B-Ausgabe (Verzeichnisse enthalten):
dir /B | find /c /v "~~~" 

nur Dateien zählen (ohne Verzeichnisse):
dir /A-D /B | find /c /v "~~~"


3
2017-12-03 13:20



Dies gibt die Anzahl der Dateien und Verzeichnisse als Summe zurück - TheCleaner


Gefunden diese Im Netz:

dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%

Ich habe es getestet und es scheint zu funktionieren.


2
2018-02-08 17:21



"Scheint" ist das richtige Wort hier. (1) Dies ist auf jeden Fall um eins, da der dir Befehl enthält eine Zeile mit einem Doppelpunkt, der ist nicht eine Datei. (2) Dies beruht darauf, dass das Zeitformat einen Doppelpunkt enthält, was nicht unbedingt so sein muss. (3) Es beruht auf dem Zahlenformat nicht einschließlich eines Doppelpunktes, der auch nicht unbedingt so sein muss. Außerdem ist es unnötig, hier eine Datei durchzugehen, und sie wird nicht funktionieren, wenn Sie keinen Schreibzugriff haben - schlechte Idee. - Joey
Wie man es macht, ohne Datei "NUMfiles. ###" zu erstellen? - NickUnuchek


Nur ein Vorbehalt für diejenigen, die Trevokes PowerShell-Antwort oben verwenden könnten (Windows-Eingabeaufforderung: Wie erhält man die Anzahl aller Dateien im aktuellen Verzeichnis?): Die Rückgabe der Eigenschaft Count einer Sammlung, die von Get-ChildItem zurückgegeben wird, kann zu falschen Ergebnissen führen, wenn der Wert 1 oder 0 ist. Dies liegt daran, dass die Count-Eigenschaft nur für Arrays verfügbar ist. Wenn Get-ChildItem weniger als 2 Elemente zurückgibt, ist das Ergebnis skalar und .Count gibt nichts zurück. Um dies zu umgehen, wird es explizit in ein Array umgewandelt, z. B. @ (Get-ChildItem C: \ Scripts) .Count.

Für weitere Informationen, siehe http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file oder http://www.vistax64.com/powershell/266379-get-childitem-count-not-working-one-file.html.


2
2018-02-25 00:16





dir Gibt die Anzahl der Dateien und Verzeichnisse unten zurück


0
2018-02-08 17:15





Das wird natürlich funktionieren

Ohne etwas auf dem Server zu installieren, aber mit Powershell auf Ihrer Workstation tun könnte:

(gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count

Mit diesem Befehl erhalten Sie alle Dateien (System und versteckt enthalten) und wie bereits erwähnt, wenn Powershell auf der Maschine ist, können Sie einfach

(GCI c:\*.*).count

Beachten Sie, dass wenn Sie das nicht einschließen . Sie erhalten eine Zählung aller Dateien und aller Verzeichnisse. Sie fügen keine versteckten Dateien und Systemdateien hinzu, die Sie hinzufügen müssen, um alle zu zählen


0
2018-02-08 17:57