Wie etwas für jede Datei in einem Verzeichnis mit einer Batch-Skript zu tun
-
05-07-2019 - |
Frage
Wie iterieren Sie über jede Datei in einem Verzeichnis mit einer .bat oder .cmd-Datei?
Der Einfachheit halber geben Sie bitte eine Antwort, die den Dateinamen oder Dateipfad nur Echos.
Lösung
Kommandozeilen-Nutzung:
for /f %f in ('dir /b c:\') do echo %f
Batch-Datei Nutzung:
for /f %%f in ('dir /b c:\') do echo %%f
Aktualisieren : Wenn die Verzeichnisdateien mit Platz in dem Namen enthalten, müssen Sie das Trennzeichen des for /f
Befehl ändern verwendet. zum Beispiel, können Sie die Pipezeichen verwenden.
for /f "delims=|" %%f in ('dir /b c:\') do echo %%f
Update 2 : (quick ein Jahr und eine Hälfte nach der ursprünglichen Antwort :-)) Wenn der Verzeichnisname selbst ein Leerzeichen im Namen hat, können Sie die usebackq
Option auf dem for
verwenden:
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f
Und wenn Sie die Umleitung der Ausgabe oder Befehlsleitungen verwenden müssen, verwenden Sie die Escape char (^
):
for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
Andere Tipps
Alternativ können Sie:
forfiles /s /m *.png /c "cmd /c echo @path"
Der forfiles Befehl in Windows Vista verfügbar ist und oben.
Einfachste Methode:
über die Befehlszeile verwenden:
for %f in (*.*) do echo %f
Von einer Batch-Datei (das Doppelte des% Prozentzeichen auf):
for %%f in (*.*) do echo %%f
Von einer Batch-Datei mit Ordner als erster Parameter angegeben:
for %%f in (%1\*.*) do echo %%f
Mit
for /r path %%var in (*.*) do some_command %%var
mit:
- Pfad ist der Ausgangspfad.
- %% var wobei einige Bezeichner.
- *. * Ist ein filemask oder den Inhalt einer Variablen.
- some_command wobei der Befehl mit dem Pfad und var verketteten als Parameter auszuführen.
Eine andere Möglichkeit:
for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
Ich hatte einige Malware, die alle Dateien in einem Verzeichnis als verstecktes / System markiert / Read-only. Wenn jemand findet sich sonst in dieser Situation cd in das Verzeichnis, und führen Sie for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f
.