453 Stimmen

Alle Dateien in einem Verzeichnis mit einer 'for'-Schleife durchlaufen

Wie kann ich über jede Datei in einem Verzeichnis iterieren, indem ich eine for Schleife?

Und wie kann ich feststellen, ob es sich bei einem bestimmten Eintrag um ein Verzeichnis oder nur um eine Datei handelt?

3voto

Knoots Punkte 21

Ich verwende den Befehl xcopy mit der Option /L, um die Dateinamen zu erhalten. Wenn Sie also entweder ein Verzeichnis oder alle Dateien in einem Unterverzeichnis abrufen wollen, könnten Sie so vorgehen:

for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a

Ich verwende einfach c:\ als Ziel, weil es auf Windows-Systemen immer vorhanden ist und nicht kopiert wird, so dass es keine Rolle spielt. Wenn Sie auch die Unterverzeichnisse wollen, verwenden Sie einfach die Option /s am Ende. Sie können auch die anderen Schalter von xcopy verwenden, wenn Sie sie aus anderen Gründen benötigen.

3voto

Max Punkte 424

Sie könnte auch die für Dateien Befehl:

forfiles /s 

und prüfen Sie auch, ob es sich um ein Verzeichnis handelt

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

3voto

Ankur Punkte 1158

Der folgende Code erstellt eine Datei mit dem Namen "AllFilesInCurrentDirectorylist.txt" im aktuellen Verzeichnis, die die Liste aller Dateien (Only Files) im aktuellen Verzeichnis enthält. Ausprobieren

dir /b /a-d > AllFilesInCurrentDirectorylist.txt

2voto

sugerfunk Punkte 21

Probieren Sie dies, um zu prüfen, ob eine Datei ein Verzeichnis ist:

FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory

Dies sagt Ihnen nur, ob eine Datei KEIN Verzeichnis ist, was auch dann der Fall ist, wenn die Datei nicht existiert, also überprüfen Sie das bei Bedarf zuerst. Die Carets (^) werden verwendet, um die Umleitungssymbole zu umgehen, und die Ausgabe der Dateiliste wird auf NUL umgeleitet, um zu verhindern, dass sie angezeigt wird, während die Fehlerausgabe der DIR-Liste auf die Ausgabe umgeleitet wird, damit Sie gegen die DIR-Meldung "Datei nicht gefunden" testen können.

2voto

Littlepony Punkte 21

Versuchen Sie dies:

::Example directory
set SetupDir=C:\Users

::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable 
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1

echo there are %counter% files in your folder

Es zählt die .msi und .exe Dateien in Ihrem Verzeichnis (und im Unterverzeichnis). Es macht also auch einen Unterschied zwischen Ordnern und Dateien als ausführbare Dateien.

Fügen Sie einfach eine Erweiterung hinzu (.pptx .docx ), wenn Sie andere Dateien in der Schleife filtern müssen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X