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?

14voto

Sam Meldrum Punkte 13529

%1 bezieht sich auf das erste übergebene Argument und kann nicht in einem Iterator verwendet werden.

Versuchen Sie dies:

@echo off
for %%i in (*.*) do echo %%i

11voto

datchung Punkte 2340

Ich hatte Probleme, die Antwort von jop mit einem absoluten Pfad zum Laufen zu bringen, bis ich diesen Hinweis fand: https://ss64.com/nt/for_r.html

Das folgende Beispiel durchläuft in einer Schleife alle Dateien in einem durch den absoluten Pfad angegebenen Verzeichnis.

For /R C:\absoulte\path\ %%G IN (*.*) do (
  Echo %%G
)

10voto

jafarbtech Punkte 6329

An alle Dateien und Ordner durchlaufen können Sie

for /F "delims=" %%a in ('dir /b /s') do echo %%a

An nur alle Ordner durchlaufen nicht mit Dateien, dann können Sie

for /F "delims=" %%a in ('dir /a:d /b /s') do echo %%a

Dónde /s liefert alle Ergebnisse im gesamten Verzeichnisbaum in unbegrenzter Tiefe. Sie können überspringen /s wenn Sie den Inhalt dieses Ordners und nicht dessen Unterordner durchsuchen wollen

Implementierung der Suche in Iteration

An durch bestimmte benannte Dateien und Verzeichnisse iterieren Sie können nach dem Namen suchen und mit der for-Schleife iterieren

for /F "delims=" %%a in ('dir "file or folder name" /b /s') do echo %%a

An durch bestimmte benannte Ordner/Verzeichnisse und nicht durch Dateien zu iterieren verwenden, dann /AD in demselben Befehl

for /F "delims=" %%a in ('dir "folder name" /b /AD /s') do echo %%a

9voto

Ste Punkte 1213

Hier ist mein Versuch mit Kommentaren im Code.

Ich bin gerade dabei, meine Biatch-Kenntnisse aufzufrischen, also verzeihen Sie mir eventuelle eklatante Fehler.

Ich habe versucht, eine All-in-One-Lösung zu schreiben, so gut ich kann, mit ein paar Modifikationen, wo der Benutzer sie benötigt.

Einige wichtige Hinweise: Ändern Sie einfach die Variable recursive a FALSE wenn Sie nur die Dateien und Ordner des Stammverzeichnisses verarbeiten wollen. Andernfalls werden alle Ordner und Dateien durchlaufen.

C&C höchst willkommen...

@echo off
title %~nx0
chcp 65001 >NUL
set "dir=c:\users\%username%\desktop"
::
:: Recursive Loop routine - First Written by Ste on - 2020.01.24 - Rev 1
::
setlocal EnableDelayedExpansion
rem THIS IS A RECURSIVE SOLUTION [ALBEIT IF YOU CHANGE THE RECURSIVE TO FALSE, NO]
rem By removing the /s switch from the first loop if you want to loop through
rem the base folder only.
set recursive=TRUE
if %recursive% equ TRUE ( set recursive=/s ) else ( set recursive= )
endlocal & set recursive=%recursive%
cd /d %dir%
echo Directory %cd%
for %%F in ("*") do (echo     %%F)                                 %= Loop through the current directory. =%
for /f "delims==" %%D in ('dir "%dir%" /ad /b %recursive%') do (    %= Loop through the sub-directories only if the recursive variable is TRUE. =%
  echo Directory %%D
  echo %recursive% | find "/s" >NUL 2>NUL && (
    pushd %%D
    cd /d %%D
    for /f "delims==" %%F in ('dir "*" /b') do (                      %= Then loop through each pushd' folder and work on the files and folders =%
      echo %%~aF | find /v "d" >NUL 2>NUL && (                        %= This will weed out the directories by checking their attributes for the lack of 'd' with the /v switch therefore you can now work on the files only. =%
      rem You can do stuff to your files here.
      rem Below are some examples of the info you can get by expanding the %%F variable.
      rem Uncomment one at a time to see the results.
      echo     %%~F           &rem expands %%F removing any surrounding quotes (")
      rem echo     %%~dF          &rem expands %%F to a drive letter only
      rem echo     %%~fF          &rem expands %%F to a fully qualified path name
      rem echo     %%~pF          &rem expands %%A to a path only
      rem echo     %%~nF          &rem expands %%F to a file name only
      rem echo     %%~xF          &rem expands %%F to a file extension only
      rem echo     %%~sF          &rem expanded path contains short names only
      rem echo     %%~aF          &rem expands %%F to file attributes of file
      rem echo     %%~tF          &rem expands %%F to date/time of file
      rem echo     %%~zF          &rem expands %%F to size of file
      rem echo     %%~dpF         &rem expands %%F to a drive letter and path only
      rem echo     %%~nxF         &rem expands %%F to a file name and extension only
      rem echo     %%~fsF         &rem expands %%F to a full path name with short names only
      rem echo     %%~dp$dir:F    &rem searches the directories listed in the 'dir' environment variable and expands %%F to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string
      rem echo     %%~ftzaF       &rem expands %%F to a DIR like output line
      )
      )
    popd
    )
  )
echo/ & pause & cls

5voto

Axeman Punkte 349
for %1 in (*.*) do echo %1

Versuchen Sie "HELP FOR" in cmd für eine vollständige Anleitung

Dies ist die Anleitung für XP-Befehle. http://www.ss64.com/nt/

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