Frage zur Syntax in FOR-Schleife
Ich komme mit einer (sicher "einfachen") Problematik nicht weiter.. Situation:
Info: Die txt-Dateien enthalten mehrere Zeilen (jeweils eine Auflistung von Dateinamen) von denen ich den untersten Eintrag weiterverarbeiten muss (hier als Beispiel mit "ECHO"). Mein Problem ist, dass ich es nicht hinbekommen, den Inhalt der Laufvariable %%a ausgegeben zu bekommen. Nach meinem Verständnis sollte es mit "ECHO %%%a%" gehen, aber leider ist dem nicht so.
Kann mir einer auf die Sprünge helfen? Danke und Gruß vorab!
SET Pfad=C:\temp\
SET Files=CW009 CW010 CW019 CW020 CW503
FOR %%a IN (%Files%) DO (
FOR /F %%b IN (%Pfad%%%a.txt) DO (
SET %%a=%%b )
ECHO %%a)
Kann mir einer auf die Sprünge helfen? Danke und Gruß vorab!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64017
Url: https://administrator.de/contentid/64017
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Markx!
Versuch es so:
Wenn sich innerhalb einer "for"-Schleife der Wert einer Variablen ändert, musst Du die "verzögerte Variablenauflösung" (= delayedexpansion) verwenden, da ansonsten immer nur der Wert zu Beginn der Schleife ermittelt und in der Schleife verwendet wird. Als Folge davon ändert sich die Variablenschreibweise (der betreffenden Variable) von %Variable% auf !Variable!.
Die Zuweisung SET%%a=%%b ist nicht nur syntaktisch falsch, sondern auch nicht sinnvoll - %%a erhält seine Werte ja aus der "for"-Schleife und sollte daher innerhalb der Schleife nicht geändert werden.
Grüße
bastla
Versuch es so:
setlocal & enabledelayedexpansion
SET Pfad=C:\temp\
SET Files=CW009 CW010 CW019 CW020 CW503
FOR %%a IN (%Files%) DO (
FOR /F %%b IN (%Pfad%%%a.txt) DO (
SET Untester=%%b
)
ECHO !Untester!
)
Die Zuweisung SET
Grüße
bastla
Hallo Markx!
Das sollte auch eine Batch-Datei sein (zumindest hatte ich es aufgrund des Variablennamens %%b angenommen), also bitte als solche testen.
Zum Variablennamen %%a: Auch wenn damit nicht die Zählvariable %%a gemeint war, ist es zwar möglich, eine solche Variable zu erstellen, aber verwenden wirst Du sie auch nur mit "delayedexpansion" können, also (in einem Batch) etwa:
Welchen besonderen Zweck sollten denn die beiden Prozentzeichen erfüllen?
Grüße
bastla
Das sollte auch eine Batch-Datei sein (zumindest hatte ich es aufgrund des Variablennamens %%b angenommen), also bitte als solche testen.
Zum Variablennamen %%a: Auch wenn damit nicht die Zählvariable %%a gemeint war, ist es zwar möglich, eine solche Variable zu erstellen, aber verwenden wirst Du sie auch nur mit "delayedexpansion" können, also (in einem Batch) etwa:
setlocal enabledelayedexpansion
set %%a=Test
echo !%%a!
Grüße
bastla
Hallo Markx!
Sorry, dass das nicht so klappt, wie's eigentlich sollte. Bis mir etwas Besseres einfällt, versuch es damit:
Grüße
bastla
Sorry, dass das nicht so klappt, wie's eigentlich sollte. Bis mir etwas Besseres einfällt, versuch es damit:
@echo off & setlocal
SET "Pfad=C:\temp\"
SET Files=CW009 CW010 CW019 CW020 CW503
FOR %%a IN (%Files%) DO call :ProcessFile "%Pfad%%%a.txt"
goto :eof
:ProcessFile
FOR /F "usebackq" %%b IN (%1) DO SET Untester=%%b
ECHO %Untester%
goto :eof
Grüße
bastla
... Nachtrag: Auch mit dieser Version sollte es gehen (Problem dürfte die Leerstelle nach "C:\temp\" in meiner obigen Version gewesen sein):
Grüße
bastla
setlocal enabledelayedexpansion
SET "Pfad=C:\temp\"
SET Files=CW009 CW010 CW019 CW020 CW503
FOR %%a IN (%Files%) DO (
FOR /F %%b IN (%Pfad%%%a.txt) DO (
SET Untester=%%b
)
ECHO !Untester!
)
Grüße
bastla
Moin Markx,
zugegeben, ich bin auch etwas verwirrt über das Ziel, das Du anstrebst.
Deshalb meine Nachfrage: Ist das Ziel
Das zweite würde zwar wenig Sinn machen, aber der Code deutet darauf hin.
Grüße
Biber
zugegeben, ich bin auch etwas verwirrt über das Ziel, das Du anstrebst.
Deshalb meine Nachfrage: Ist das Ziel
- für die Textdatei-Namen CW009, CW010, ...CW503 zu prüfen, ob sie im Verzeichnis c:\temp existieren und falls ja, jeweils eine Umgebungsvariable der Art "CW009=c:\temp\CW009.txt" zu setzen??
- in den Textdatei-Namen CW009, CW010, ...CW503, falls sie im Verzeichnis c:\temp existieren, die jeweils darin enthaltene(n) Zeile(n) zu lesen und das erste Token als eine Umgebungsvariable der Art "ErsteZeileInCW009=c:\temp\CW009.txt" zu setzen??
Das zweite würde zwar wenig Sinn machen, aber der Code deutet darauf hin.
Grüße
Biber