Wie man mit einem Batch-Skript etwas mit jeder Datei in einem Verzeichnis macht


265

Wie iteriert man über jede Datei in einem Verzeichnis mit einer .bat- oder .cmd-Datei?

Geben Sie der Einfachheit halber eine Antwort an, die nur den Dateinamen oder den Dateipfad wiedergibt.

Antworten:


348

Befehlszeilenverwendung:

for /f %f in ('dir /b c:\') do echo %f

Verwendung von Batchdateien:

for /f %%f in ('dir /b c:\') do echo %%f

Update : Wenn das Verzeichnis Dateien mit Leerzeichen in den Namen enthält, müssen Sie das vom for /fBefehl verwendete Trennzeichen ändern . Sie können beispielsweise das Pipe-Zeichen verwenden.

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

Update 2 : (schnell anderthalb Jahre nach der ursprünglichen Antwort :-)) Wenn der Verzeichnisname selbst ein Leerzeichen im Namen enthält, können Sie die usebackqOption auf for:

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

Wenn Sie die Ausgabeumleitung oder die Befehlsleitung verwenden müssen, verwenden Sie das Escapezeichen char ( ^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f

3
Zumindest für einige Befehle sollte die Dateivariable in doppelte Anführungszeichen gesetzt werden.
Jirka

1
Warum wird das /fnach dem benötigt for? Gemäß den Hilfedokumenten wird das /fFlag geöffnet und jede Datei gelesen. Wird das benötigt, um Dateien zu wiederholen oder umzubenennen?
Snekse

17
Das /fAfter FORbeschränkt es auf Dateien. In ähnlicher Weise /deinengt auf Verzeichnisse (Ordner) und /rinstruiert es rekursiv sein.

3
+1 Dies ist eine lebendige Antwort, die ständig beachtet wird. Danke vielmals.
Sabuncu

4
'dir /b "c:\program files"'`dir /b "c:\program files"`
Ich habe

101

Alternativ können Sie Folgendes verwenden:

forfiles /s /m *.png /c "cmd /c echo @path"

Der Befehl forfiles ist in Windows Vista und höher verfügbar.


1
Es war schwierig, Pfade mit Leerzeichen in der 2. cmd-Shell zu verwenden. Am Ende habe ich% PATH% env var angepasst, um die Arbeit zu erledigen. Aber danke. hilfreich
twobob

70

Einfachste Methode:

Verwenden Sie in der Befehlszeile:

for %f in (*.*) do echo %f

Aus einer Batch-Datei (verdoppeln Sie die Prozentzeichen):

for %%f in (*.*) do echo %%f

Aus einer Batch-Datei mit dem als 1. Parameter angegebenen Ordner:

for %%f in (%1\*.*) do echo %%f

8
nicht nur am einfachsten, sondern auch deutlich eleganter im Vergleich zur Auswertung der dir /BAusgabe mit for.
Syneticon-DJ

5
Fügen Sie ein / r vor dem% f hinzu, um Unterverzeichnisse zu rekursieren
PRMan

35

Verwenden

for /r path %%var in (*.*) do some_command %%var

mit:

  • Pfad ist der Startpfad.
  • %% var ist eine Kennung.
  • *. * ist eine Dateimaske ODER der Inhalt einer Variablen.
  • some_command ist der Befehl, der ausgeführt werden soll, wobei path und var als Parameter verkettet sind.

2
Ich erhalte die Fehlermeldung: %%var was unexpected at this time.Können Sie ein genaues Beispiel geben? Ich habe eine Reihe von Variationen vonfor /r . %%var in (*.*) do echo %%var
Hippietrail

3
Aus irgendeinem seltsamen Grund ist der Variablenname auf ein Zeichen beschränkt.
ollb

2
Können wir unterschiedliche Smileys für unterschiedliche Ergebnisse verwenden?
Silver Quettier


-1

Ich hatte Malware, die alle Dateien in einem Verzeichnis als versteckt / system / schreibgeschützt markierte. Wenn sich jemand in dieser Situation befindet, CD in das Verzeichnis und ausführen for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

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.