Wie durchläuft man jede Datei in einem Verzeichnis mit einer .bat- oder .cmd-Datei?
Geben Sie der Einfachheit halber eine Antwort ein, die nur den Dateinamen oder den Dateipfad wiedergibt.
Befehlszeilenverwendung:
for /f %f in ('dir /b c:\') do echo %f
Verwendung von Stapeldateien:
for /f %%f in ('dir /b c:\') do echo %%f
pdate: Wenn das Verzeichnis Dateien mit Leerzeichen in den Namen enthält, müssen Sie das Trennzeichen for /f
Befehl wird verwendet. Sie können beispielsweise das Pipe-Zeichen verwenden.
for /f "delims=|" %%f in ('dir /b c:\') do echo %%f
pdate 2: (schnell anderthalb Jahre nach der ursprünglichen Antwort :-)) Wenn der Verzeichnisname selbst ein Leerzeichen enthält, können Sie die Option usebackq
auf der for
:
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f
Und wenn Sie Ausgabeumleitung oder Befehls-Piping verwenden müssen, verwenden Sie das Escape-Zeichen (^
):
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i Microsoft`) do echo %%f
Alternativ verwenden Sie:
forfiles /s /m *.png /c "cmd /c echo @path"
Der Befehl forfiles ist in Windows Vista und höher verfügbar.
Einfachste Methode:
Verwenden Sie in der Befehlszeile:
for %f in (*.*) do echo %f
Aus einer Stapeldatei (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
Verwenden
for /r path %%var in (*.*) do some_command %%var
mit:
Ein anderer Weg:
for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"