for

Führt einen angegebenen Befehl für jede Datei innerhalb einer Gruppe von Dateien aus.

Syntax

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

Parameters

Parameter Description
{%% \| %}<variable> Required. Stellt einen austauschbaren Parameter dar. Verwenden Sie ein einzelnes Prozentzeichen (%), um den Befehl for an der Eingabeaufforderung auszuführen. Verwenden Sie doppelte Prozentzeichen (%%), um den for-Befehl in einer Batch-Datei auszuführen. Bei Variablen wird zwischen Groß- und Kleinschreibung unterschieden, und sie müssen mit einem alphabetischen Wert wie %a, %boder %cdargestellt werden.
(<set>) Required. Gibt eine oder mehrere Dateien, Verzeichnisse oder Textzeichenfolgen oder einen Wertebereich an, für den der Befehl ausgeführt werden soll. Die Klammern sind erforderlich.
<command> Required. Gibt den Befehl an, den Sie für jede Datei, jedes Verzeichnis oder jede Textzeichenfolge oder für den in set enthaltenen Wertebereich ausführen möchten.
<commandlineoptions> Gibt alle Befehlszeilenoptionen an, die Sie mit dem angegebenen Befehl verwenden möchten.
/? Zeigt die Hilfe an der Eingabeaufforderung an.

Remarks

  • Sie können diesen Befehl in einer Batchdatei oder direkt über die Eingabeaufforderung verwenden.

  • Die folgenden Attribute gelten für den for-Befehl:

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

    • Variablennamen sind Groß-/Kleinschreibung, global und nicht mehr als 52 können gleichzeitig aktiv sein.

    • Um Verwechslungen mit den Batch-Parametern zu vermeiden, können Sie über %0ein beliebiges Zeichen für die %9 verwenden, mit Ausnahme der Ziffern 0 bis 9. Bei einfachen Batchdateien funktioniert beispielsweise ein einzelnes Zeichen %%f .

    • Sie können mehrere Werte für Variablen in komplexen Batch-Dateien verwenden, um verschiedene ersetzbare Variablen zu unterscheiden.

  • Der set-Parameter kann eine einzelne Gruppe von Dateien oder mehrere Gruppen von Dateien darstellen. Sie können Platzhalterzeichen (* und ?) verwenden, um einen Dateisatz anzugeben. Es folgen gültige Dateisätze:

    (*.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 % variable or , %% variableund dann verarbeitet der angegebene Befehl diesen Wert. Dies wird so lange fortgesetzt, bis alle Dateien (oder Gruppen von Dateien), die dem eingestellten Wert entsprechen, verarbeitet wurden.

  • In und do sind keine Parameter, aber Sie müssen sie mit diesem Befehl verwenden. Wenn Sie eines dieser Schlüsselwörter weglassen, wird eine Fehlermeldung angezeigt.

  • Wenn Befehlserweiterungen aktiviert sind (dies ist die 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 set entspricht. Die Syntax lautet:

      for /d {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      
    • Rekursiv: Durchlaufen den Verzeichnisbaum, der bei drive:path verwurzelt ist, und führt die for-Anweisung in jedem Verzeichnis des Baums aus. Wenn nach /r kein Verzeichnis angegeben wird, wird das aktuelle Verzeichnis als Stammverzeichnis verwendet. Wenn set nur ein einzelner Punkt (.) ist, wird nur der Verzeichnisbaum aufgelistet. Die Syntax lautet:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      
    • Durchlaufen eines Wertebereichs: Verwenden Sie eine iterative Variable, um den Anfangswert (Start#) festzulegen, und durchlaufen Sie dann einen festgelegten Wertebereich, bis der Wert den festgelegten Endwert (Ende#) überschreitet. /l führt die Iterative aus, indem Start# mit End# verglichen wird. Wenn start# kleiner als end# ist, wird der Befehl ausgeführt. Wenn die iterative Variable end# überschreitet, verlässt die Befehlsshell die Schleife. Sie können auch einen negativen Schritt# verwenden, um einen Bereich mit abnehmenden 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 lautet:

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlineoptions>]
      
    • Iterieren und Dateianalyse: Verwenden Sie die Dateianalyse, um Befehlsausgabe, Zeichenfolgen und Dateiinhalte zu verarbeiten. Verwenden Sie iterative Variablen, um den Inhalt oder die Zeichenfolgen zu definieren, die Sie untersuchen möchten, und verwenden Sie die verschiedenen parsingkeywords-Optionen , um die Analyse weiter zu ändern. Verwenden Sie die token-Option parsingkeywords , um anzugeben, welche Token als iterative Variablen übergeben werden sollen. Wenn /f ohne die Token-Option verwendet wird, untersucht es nur das erste Token.

      Die Dateianalyse besteht aus dem Lesen der Ausgabe, Zeichenfolge oder dateiinhalte und dann in einzelne Textzeilen aufteilen und jede Zeile in null oder mehr Token analysieren. Die for-Schleife wird dann aufgerufen, wobei der iterative Variablenwert auf das Token festgelegt ist. Standardmäßig übergibt /f das erste leere getrennte Token aus jeder Zeile jeder Datei. Leere Zeilen werden übersprungen.

      Die Syntaxen sind:

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

      Das set-Argument gibt einen oder mehrere Dateinamen an. Jede Datei wird geöffnet, gelesen und verarbeitet, bevor sie zur nächsten Datei im Satz verschoben wird. Um das standardmäßige Analyseverhalten zu überschreiben, geben Sie parsingkeywords an. Dies ist eine Zeichenfolge, die ein oder mehrere Schlüsselwörter enthält, um verschiedene Analyseoptionen anzugeben.

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

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

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

      Keyword Description
      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 Trennzeichensatz an. Dadurch wird der Standardtrennzeichensatz von Leerzeichen und Tabstopp ersetzt.
      tokens=<x,y,m-n> Gibt an, welche Token aus den einzelnen Zeilen für jede Iteration an die for-Schleife übergeben werden sollen. Daher werden zusätzliche Variablennamen zugewiesen. m-n gibt einen Bereich an, der von denm-ten bis zu denn-ten Token reicht. Wenn das letzte Zeichen in der Zeichenkette tokens= ein Sternchen (*) ist, wird eine zusätzliche Variable zugeordnet, und sie erhält den verbleibenden Text in der Zeile nach dem letzten Token, das analysiert wird.
      usebackq Gibt an, dass eine in Anführungszeichen gesetzte Zeichenfolge als Befehl ausgeführt werden soll, eine in Anführungszeichen gesetzte Zeichenfolge als Literalzeichenfolge oder für lange Dateinamen, die Leerzeichen enthalten, Dateinamen zulassen <set>, jeweils in doppelte Anführungszeichen eingeschlossen werden.
    • Variable Substitution: In der folgenden Tabelle ist die optionale Syntax (für jede Variable I) aufgeführt:

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

      In der folgenden Tabelle sind Zusatzkombinationen aufgeführt, die Sie verwenden können, um zusammengesetzte Ergebnisse zu erhalten.

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

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

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

  • Analysieren einer Zeichenfolge: Sie können die for /f Analyselogik für eine sofortige Zeichenfolge verwenden, indem Sie entweder doppelte Anführungszeichen (<literalstring> usebackq) oder in einfachen Anführungszeichen (mit usebackq) --z. B. (MyString) oder ('MyString') umschließen. <literalstring> wird als einzelne Eingabezeile einer Datei behandelt. Bei der Analyse in doppelten Anführungszeichen <literalstring> werden Befehlssymbole wie (\ & | > < ^) als normale Zeichen behandelt.

  • Parsing-Ausgabe: Sie können den for /f Befehl verwenden, um die Ausgabe eines Befehls zu analysieren, indem Sie ein Anführungszeichen <command> zwischen die Klammern setzen. Es wird als Befehlszeile behandelt, die an ein untergeordnetes Cmd.exeübergeben wird. Die Ausgabe wird im Arbeitsspeicher erfasst und analysiert, als ob es sich um eine Datei handelt.

Examples

Verwenden Sie die folgende Syntax, um for in einer Batchdatei zu verwenden:

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

Geben Sie Folgendes ein, um den Inhalt aller Dateien im aktuellen Verzeichnis anzuzeigen, die die Erweiterung .doc oder .txt haben, indem Sie die ersetzbare Variable %fverwenden:

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

Im vorherigen Beispiel wird jede Datei mit der Erweiterung .doc oder .txt im aktuellen Verzeichnis durch die Variable %f ersetzt, bis der Inhalt jeder Datei angezeigt wird. 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, geben Sie folgendes ein, indem Sie kommentierte Zeilen ignorieren:

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

Dieser Befehl analysiert jede Zeile in myfile.txt. Zeilen, die mit einem Semikolon beginnen, werden ignoriert und das zweite und dritte Token aus jeder Zeile an den for-Text übergeben (Token werden durch Kommas oder Leerzeichen getrennt). Der Text der for-Anweisung verweist %i auf das Abrufen des zweiten Tokens, %j auf das Abrufen des dritten Tokens und %k auf das Abrufen aller verbleibenden Token. Wenn die von Ihnen bereitgestellten Dateinamen Leerzeichen enthalten, verwenden Sie Anführungszeichen um den Text (z. B. Dateiname). Um Anführungszeichen zu verwenden, müssen Sie usebackq verwenden. Andernfalls werden die Anführungszeichen als Definition einer literalen Zeichenfolge interpretiert, die analysiert werden soll.

%iwird explizit in der for-Anweisung deklariert. %j und %k werden implizit mit tokens= deklariert. Sie können tokens= verwenden, um bis zu 26 Token anzugeben, wenn dies keinen Versuch verursacht, eine Variable zu deklarieren, die höher als der Buchstabe z oder z ist.

Geben Sie Folgendes ein, um die Ausgabe eines Befehls zu analysieren, indem Sie set zwischen die Klammern setzen:

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

Um eine rekursive Schleife aller Dateien in einem Verzeichnis auszuführen, einschließlich Unterverzeichnissen und Echo ihres vollständigen Pfads, wann sie zuletzt geändert wurden, und deren Dateigröße geben Sie Folgendes ein:

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