Zählen Sie Dateien in einem Ordner und Unterordnern über die Befehlszeile

Zählen Sie Dateien in einem Ordner und Unterordnern über die Befehlszeile

Wie zähle ich alle Dateien eines bestimmten Typs (z. B. *.mp3) in einem bestimmten Ordner (und optional Unterordnern) von der Befehlszeile aus in eine Umgebungsvariable?

(bitte keine PowerShell, nur Batch-Befehle)

Antwort1

set filesCount=0 & for %f in (*) do @(set /a filesCount+=1 > nul)

Antwort2

Zählen Sie die Dateien in einem Ordner und Unterordnern

Verwenden Sie den folgenden Befehl:

dir /b *.mp3 /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%

Die Umgebungsvariable %count%enthält die Anzahl der Dateien.

Notiz:

  • Entfernen Sie es /s, wenn Sie Dateien in Unterordnern nicht zählen möchten.

Beispiel (mit *.txt)

Verzeichnisliste zur Anzeige der 17 Dateien:

F:\test>dir /b *.txt /s
F:\test\abc.txt
F:\test\blackwhite.txt
F:\test\cpu.txt
F:\test\interface.txt
F:\test\Lorem ipsum.txt
F:\test\right.txt
F:\test\rights.txt
F:\test\software.txt
F:\test\tabs.txt
F:\test\test.txt
F:\test\this is inside junction.txt
F:\test\unique.txt
F:\test\xyz.txt
F:\test\sub\abc.txt
F:\test\sub\xyz.txt
F:\test\sub with space\junction sub with space.txt
F:\test\sub with space\xyz.txt

Führen Sie den Befehl aus:

F:\test>dir /b *.txt /s 2> nul | find "" /v /c > tmp && set /p count=<tmp && del tmp && echo %count%
17

Weiterführende Literatur

  • Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
  • finden- Suchen Sie in einer Datei nach einer Textzeichenfolge und zeigen Sie alle Zeilen an, in denen sie gefunden wird.

Antwort3

Verwenden Sie eine Kombination aus dirund findzum Zählen der Dateien. Speichern Sie die Dateien über die forSchleife in einer Variablen. Leiten Sie die Fehlerausgabe um, um den Fehler nulauszublenden File Not Found.

@echo off
for /f %%i in ('dir *.xlsx /s /b 2^> nul ^| find "" /v /c') do set VAR=%%i
echo %VAR%

Siehe Beschreibungen der Parameter mit /?for dir, find, und for.

Antwort4

Sie können die Option (Liste) von Robocopy nutzen /L. Dann brauchen Sie keine komplizierten For-Schleifen oder Pipes. Es ist auch sehr schnell.

robocopy c:\mydir c:\dummy /L /E *.mp3 *.txt
  • c:\mydir: Ersetzen Sie dies durch den Pfad zum Verzeichnis, in dem Sie suchen möchten
  • c:\dummy: Sie können dies so lassen, es ist nur ein Dummy-Argument, das ignoriert wird, da wir verwenden/L
  • /L: nur Liste, es wird nichts kopiert/verschoben.
  • /E: Unterverzeichnisse rekursiv einschließen. Sie können dies entfernen, wenn Sie keine Unterverzeichnisse durchsuchen möchten.
  • Wenn Sie die Liste der Dateien und Verzeichnisse nicht drucken möchten, können Sie /NFL(Keine Dateiliste) und/oder /NDL(Keine Verzeichnisliste) hinzufügen.

Sie erhalten einen schönen Bericht wie unten. Schauen Sie sich einfach die TotalSpalte an.

Source : c:\mydir

Files : *.mp3
        *.txt

--------------------------------------------------

{list of all the matching files}

--------------------------------------------------

            Total    Copied   Skipped  Mismatch    FAILED    Extras
 Dirs :         5         5         0         0         0         0
Files :        89        89         0         0         0         0
Bytes :   3.485 g   3.485 g         0         0         0         0

verwandte Informationen