für

Führt einen angegebenen Befehl für jede Datei in einer Reihe von Dateien aus.

Syntax

for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]

Parameter

Parameter BESCHREIBUNG
{%% \| %}<variable> Erforderlich. Steht für einen ersetzbaren Parameter. Verwenden Sie ein einzelnes Prozentzeichen (%), um den Befehl for an der Eingabeaufforderung auszuführen. Verwenden Sie doppelte Prozentzeichen (%%), um den Befehl for in einer Batchdatei auszuführen. Bei Variablen muss die Groß- und Kleinschreibung beachtet werden, und sie müssen mit einem alphabetischen Wert wie %a, %b oder %c geschrieben werden.
(<set>) Erforderlich. Gibt eine oder mehrere Dateien, Verzeichnisse oder Textzeichenfolgen oder einen Wertebereich an, in denen/dem der Befehl ausgeführt werden soll. Die Klammern sind erforderlich.
<command> Erforderlich. Gibt den Befehl an, den Sie für jede Datei, jedes Verzeichnis, jede Textzeichenfolge oder jeden Wertebereich ausführen möchten, das/die/der in set enthalten ist.
<commandlineoptions> Gibt alle Befehlszeilenoptionen an, die Sie mit dem angegebenen Befehl verwenden möchten.
/? Zeigt die Hilfe an der Eingabeaufforderung an.

Bemerkungen

  • Sie können diesen Befehl in einer Batchdatei oder direkt an der Eingabeaufforderung verwenden.

  • Die folgenden Attribute können mit dem Befehl for verwendet werden:

    • Dieser Befehl ersetzt % variable oder %% variable durch jede Textzeichenfolge im angegebenen Satz, bis der angegebene Befehl alle Dateien verarbeitet.

    • Bei Variablennamen muss die Groß-/Kleinschreibung beachtet werden, sie sind global, und es dürfen nicht mehr als 52 gleichzeitig aktiv sein.

    • Um Verwechslungen mit den Batchparametern %0 bis %9 zu vermeiden, können Sie für variable jedes beliebige Zeichen mit Ausnahme der Ziffern 0 bis 9 verwenden. Bei einfachen Batchdateien funktioniert ein einzelnes Zeichen wie z. B. %%f.

    • Sie können in komplexen Batchdateien mehrere Werte für variable verwenden, um verschiedene ersetzbare Variablen voneinander zu unterscheiden.

  • Der Parameter set kann für eine einzelne Gruppe von Dateien oder mehrere Gruppen von Dateien stehen. Sie können Platzhalterzeichen (* und ?) verwenden, um einen Dateisatz anzugeben. Die folgenden Dateisätze sind gültig:

    (*.doc)
    (*.doc *.txt *.me)
    (jan*.doc jan*.rpt feb*.doc feb*.rpt)
    (ar??1991.* ap??1991.*)
    
  • Wenn Sie diesen Befehl verwenden, ersetzt der erste Wert in set% variable oder %% variable, und dann verarbeitet der angegebene Befehl diesen Wert. Dies wird fortgesetzt, bis alle Dateien (oder Dateigruppen), die mit dem Wert set übereinstimmen, verarbeitet wurden.

  • in und do sind keine Parameter, aber Sie müssen diese Schlüsselwörter mit diesem Befehl verwenden. Wenn Sie eins dieser Schlüsselwörter auslassen, wird eine Fehlermeldung angezeigt.

  • Wenn Befehlserweiterungen aktiviert sind (Standardeinstellung), werden die folgenden zusätzlichen Formen von for unterstützt:

    • Nur Verzeichnisse: Wenn set Platzhalterzeichen (* oder ?) enthält, wird der angegebene Befehl für jedes Verzeichnis (anstelle einer Gruppe von Dateien in einem angegebenen Verzeichnis) ausgeführt, das mit set übereinstimmt. Die Syntax ist:

      for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
      
    • Rekursiv: Durchläuft die Verzeichnisstruktur mit dem Stammpfad drive:path, und führt die for-Anweisung in jedem Verzeichnis der Struktur aus. Wenn nach /r kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis als Stammverzeichnis verwendet. Wenn set nur ein einzelner Punkt (.) ist, wird nur die Verzeichnisstruktur aufgezählt. Die Syntax ist:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      
    • Durchlaufen eines Wertebereichs: Verwenden Sie eine iterative Variable, um den Anfangswert (start#) festzulegen und dann schrittweise einen festgelegten Wertebereich zu durchlaufen, bis der Wert den Wert für das Ende des Satzes (end#) überschreitet. /l führt die Iteration aus, indem start# mit end# verglichen wird. Wenn start# kleiner als end# ist, wird der Befehl ausgeführt. Wenn die iterative Variable end# überschreitet, beendet die Befehlsshell die Schleife. Sie können auch einen negativen Wert für step# verwenden, um einen Bereich in absteigenden Werten zu durchlaufen. Beispielsweise generiert „(1,1,5)“ die Sequenz 1 2 3 4 5 und „(5,-1,1)“ die Sequenz 5 4 3 2 1. Die Syntax ist:

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]
      
    • Durchlaufen und Analysieren von Dateien: Verwenden Sie die Dateianalyse zum Verarbeiten von Befehlsausgabe, Zeichenfolgen und Dateiinhalten. Verwenden Sie iterative Variablen, um die Inhalte oder Zeichenfolgen zu definieren, die Sie untersuchen möchten, und verwenden Sie die verschiedenen parsingkeywords-Optionen, um die Analyse weiter anzupassen. Verwenden Sie die Tokenoption parsingkeywords, um anzugeben, welche Token als iterative Variablen übergeben werden sollen. Bei Verwendung ohne die Tokenoption überprüft /f nur das erste Token.

      Bei der Dateianalyse werden Ausgabe-, Zeichenfolgen- oder Dateiinhalte zuerst gelesen und dann in einzelne Textzeilen unterteilt. Danach wird jede Zeile auf null, ein oder mehr Token aufgegliedert. Die for-Schleife wird dann mit dem auf das Token festgelegten Wert der iterativen Variable aufgerufen. Standardmäßig übergibt /f das erste leere separate Token aus jeder Zeile jeder Datei. Leerzeilen werden übersprungen.

      Die Syntaxen sehen wie folgt aus:

      for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlinepptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlinepptions>]
      

      Das set-Argument gibt einen oder mehrere Dateinamen an. Jede Datei wird geöffnet, gelesen und verarbeitet, bevor mit der nächsten Datei in set fortgefahren wird. Um das Standardanalyseverhalten zu überschreiben, geben Sie parsingkeywords an. Dies ist eine Zeichenfolge in Anführungszeichen, die mindestens ein Schlüsselwort enthält, um verschiedene Analyseoptionen anzugeben.

      Wenn Sie die usebackq-Option nutzen, verwenden Sie eine der folgenden Syntaxen:

      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<Set>) do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<LiteralString>') do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlinepptions>]
      

      In der folgenden Tabelle sind die Analyseschlüsselwörter aufgeführt, die Sie für parsingkeywords verwenden können.

      Schlüsselwort BESCHREIBUNG
      eol=<c> Gibt ein Zeilenendezeichen an (nur ein Zeichen).
      skip=<n> Gibt die Anzahl der Zeilen an, die am Anfang der Datei übersprungen werden sollen.
      delims=<xxx> Gibt einen Satz Trennzeichen an. Dadurch werden die Standardtrennzeichen ersetzt, bei denen es sich um Leerzeichen und Tabulatorzeichen handelt.
      tokens=<x,y,m–n> Gibt an, welche Token aus jeder Zeile an die for-Schleife für jede Iteration übergeben werden sollen. Das führt dazu, dass zusätzliche Variablennamen zugewiesen werden. m-n gibt einen Bereich an, vom m-ten bis zum n-ten Token. Wenn das letzte Zeichen in der Zeichenfolge tokens= ein Sternchen (*) ist, wird eine zusätzliche Variable zugewiesen – diese empfängt den verbleibenden Text in der Zeile nach dem letzten Token, das analysiert wurde.
      usebackq Gibt an, dass eine in Backquotes (Graviszeichen) eingeschlossene Zeichenfolge als Befehl ausgeführt werden soll, dass eine in einfache Anführungszeichen eingeschlossene Zeichenfolge als Literalzeichenfolge verwendet werden soll oder dass bei langen Dateinamen, die Leerzeichen enthalten, die Namen in <set> in doppelte Anführungszeichen eingeschlossen werden sollen.
    • Ersetzung von Variablen: Die folgende Tabelle enthält optionale Syntaxen (für jede Variable mit I):

      Variable mit Modifizierer BESCHREIBUNG
      %~I Erweitert %I, wodurch alle umgebenden Anführungszeichen entfernt werden.
      %~fI Erweitert %I zu einem vollqualifizierten Pfadnamen.
      %~dI Erweitert %I auf nur einen Laufwerkbuchstaben
      %~pI Erweitert %I auf nur einen Pfad
      %~nI Erweitert %I auf nur einen Dateinamen
      %~xI Erweitert %I auf nur eine Erweiterung
      %~sI Erweitert den Pfad, sodass nur kurze Namen enthalten sind.
      %~aI Erweitert %I auf die Dateiattribute der Datei.
      %~tI Erweitert %I auf das Datum und die Uhrzeit der Datei
      %~zI Erweitert %I auf die Größe der Datei
      %~$PATH:I Durchsucht die Verzeichnisse, die in der PATH-Umgebungsvariable aufgeführt sind, und erweitert %I auf den vollqualifizierten Namen des ersten gefundenen Verzeichnisses. Wenn der Name der Umgebungsvariable nicht definiert ist oder die Datei durch die Suche nicht gefunden wird, erweitert sich dieser Modifizierer auf eine leere Zeichenfolge.

      In der folgenden Tabelle sind Kombinationen aus Modifizierern aufgeführt, die Sie verwenden können, um zusammengesetzte Ergebnisse abzurufen.

      Variable mit kombinierten Modifizierern BESCHREIBUNG
      %~dpI Erweitert %I auf nur einen Laufwerkbuchstaben und Pfad
      %~nxI Erweitert %I auf nur einen Dateinamen und eine Erweiterung
      %~fsI Erweitert %I auf einen vollständigen Pfadnamen, nur mit kurzen Namen.
      %~dp$PATH:I Durchsucht die Verzeichnisse, die in der PATH-Umgebungsvariable aufgeführt sind, nach %I und erweitert auf den Laufwerkbuchstaben und Pfad des ersten gefundenen Verzeichnisses.
      %~ftzaI Erweitert %I auf eine Ausgabezeile, die wie dir funktioniert.

      In den obigen Beispielen können Sie %I und PATH durch andere gültige Werte ersetzen. Ein gültiger for-Variablenname beendet die %~-Syntax.

      Mithilfe von Variablennamen in Großbuchstaben, wie z. B. %I, können Sie Ihren Code besser lesbar machen und Verwechslungen mit den Modifizierern vermeiden, bei denen die Groß-/Kleinschreibung nicht beachtet werden muss.

  • Analysieren einer Zeichenfolge: Sie können die for /f-Analyselogik in einer direkten Zeichenfolge verwenden, indem Sie <literalstring> entweder mit doppelten Anführungszeichen (ohne „usebackq“) oder mit einfachen Anführungszeichen (mit „usebackq“) umschließen – z. B. (MeineZeichenfolge) oder ('MeineZeichenfolge'). <literalstring> wird als einzelne Eingabezeile einer Datei behandelt. Beim Analysieren von <literalstring> in doppelten Anführungszeichen werden Befehlszeichen wie (\ & | > < ^) als normale Zeichen behandelt.

  • Analyseausgabe: Sie können den Befehl for /f verwenden, um die Ausgabe eines Befehls zu analysieren, indem Sie einen in Backquotes (Graviszeichen) eingeschlossenen <command> zwischen den Klammern platzieren. Er wird als Befehlszeile behandelt, die an eine untergeordnete Cmd.exe-Datei übergeben wird. Die Ausgabe wird im Arbeitsspeicher erfasst und geparst, wie wenn es eine Datei wäre.

Beispiele

Um for in einer Batchdatei zu nutzen, verwenden Sie die folgende Syntax:

for {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]

Um mithilfe der ersetzbaren Variable %f die Inhalte sämtlicher Dateien im aktuellen Verzeichnis anzuzeigen, die über die Erweiterung „.doc“ oder „.txt“ verfügen, geben Sie Folgendes ein:

for %f in (*.doc *.txt) do type %f

Im obigen Beispiel wird die Variable %f durch jede Datei mit der Erweiterung „.doc“ oder „.txt“ im aktuellen Verzeichnis ersetzt, bis die Inhalte aller Dateien angezeigt werden. Um diesen Befehl in einer Batchdatei zu verwenden, ersetzen Sie jedes Vorkommen von %f durch %%f. Andernfalls wird die Variable ignoriert und eine Fehlermeldung angezeigt.

Um eine Datei zu analysieren und dabei auskommentierte Zeilen zu ignorieren, geben Sie Folgendes ein:

for /f eol=; tokens=2,3* delims=, %i in (myfile.txt) do @echo %i %j %k

Dieser Befehl analysiert jede Zeile in myfile.txt. Er ignoriert Zeilen, die mit einem Semikolon beginnen, und übergibt das zweite und dritte Token aus jeder Zeile an den for-Textkörper (Token werden durch Kommas oder Leerzeichen getrennt). Der Textkörper der for-Anweisung verweist auf %i, um das zweite Token abzurufen, auf %j, um das dritte Token abzurufen, und auf %k, um alle verbleibenden Token abzurufen. Wenn die von Ihnen angegebenen Dateinamen Leerzeichen enthalten, schließen Sie ihn in Anführungszeichen ein (z. B. 'Dateiname'). Bei Verwendung von Anführungszeichen müssen Sie usebackq verwenden. Andernfalls werden die Anführungszeichen so interpretiert, als würden sie eine Literalzeichenfolge definieren, die analysiert werden soll.

%i wird in der for-Anweisung explizit deklariert. %j und %k werden implizit mithilfe von tokens= deklariert. Sie können tokens= verwenden, um bis zu 26 Token anzugeben, wenn dies nicht dazu führt, dass versucht wird, eine Variable höher als die Buchstaben z oder Z zu deklarieren.

Um die Ausgabe eines Befehls durch Platzieren von set zwischen den Klammern zu analysieren, geben Sie Folgendes ein:

for /f "usebackq delims==" %i in (`set`) do @echo %i

Um eine rekursive Schleife aller Dateien in einem Verzeichnis auszuführen, einschließlich Unterverzeichnissen, mit Angabe des vollständigen Pfads, des Zeitpunkts der letzten Änderung, der Dateigröße und des Typs, geben Sie Folgendes ein:

for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA