Batch: Variable Expansion in einer FOR-Schleife
Hallo zusammen,
leider finde ich dazu nicht viel, "vielleicht" könnt Ihr mir helfen.
Da man keine Parameter Variablen der FOR-Schleife kürzen kann, erzeuge ich eine feste Variable und eine zweite, gekürzt auf die Nummer (01,02,03,etc). Es soll ja dynamisch bleiben. Da in For-Schleifen erzeugte Variablen mit !var! weiterverwendet werden müssen, habe ich nun das Problem, wie ich mit einer Variable verfahre, die sich aus zwei Variablen zusammen setzt:
Im %log% steht zum Beispiel: (auf die Token eingeschränkt)
Die Variable !countvar!var_nr!! kann ich so nicht nutzen, da er nur die erste als Variable erkennt.
Ich möchte gerne mit der "dynamischen" Variable weiter arbeiten:
Gibt es einen Trick, wie ich das doch noch bewerkstelligen kann, oder muss ich komplett umdenken und das Script anders aufbauen?
Vielen Dank für Eure Hilfe!
Gruß
Tobias
[edit]Schreibfehler korrigiert[/edit]
leider finde ich dazu nicht viel, "vielleicht" könnt Ihr mir helfen.
Da man keine Parameter Variablen der FOR-Schleife kürzen kann, erzeuge ich eine feste Variable und eine zweite, gekürzt auf die Nummer (01,02,03,etc). Es soll ja dynamisch bleiben. Da in For-Schleifen erzeugte Variablen mit !var! weiterverwendet werden müssen, habe ich nun das Problem, wie ich mit einer Variable verfahre, die sich aus zwei Variablen zusammen setzt:
for /f "tokens=1,6 delims= " %%a in (%log%) do (
set "var=%%b"
set "var_nr=!var:~5,2!
if %%b EQU [WERT!var_nr!] (
set /a "countvar!var_nr!+=1"
)
Im %log% steht zum Beispiel: (auf die Token eingeschränkt)
Datum/Uhrzeit WERT01
Datum/Uhrzeit WERT02
Die Variable !countvar!var_nr!! kann ich so nicht nutzen, da er nur die erste als Variable erkennt.
Ich möchte gerne mit der "dynamischen" Variable weiter arbeiten:
if !countvar!var_nr!! ...
Gibt es einen Trick, wie ich das doch noch bewerkstelligen kann, oder muss ich komplett umdenken und das Script anders aufbauen?
Vielen Dank für Eure Hilfe!
Gruß
Tobias
[edit]Schreibfehler korrigiert[/edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313329
Url: https://administrator.de/contentid/313329
Ausgedruckt am: 22.11.2024 um 00:11 Uhr
9 Kommentare
Neuester Kommentar
Batch: Variable in Variable
Regards
@echo off & setlocal enabledelayedexpansion
set "test1=Hello1"
set "test2=Hello2"
set "test3=Hello3"
for /L %%a in (1 1 3) do (
set "number=%%a"
set "text=test"
call :process "!text!" "!number!"
echo !result!
)
goto :eof
:process
set "result=!%~1%~2!"
goto :eof
Hallo Tobias,
schreibe Zeile 6 folgendermaßen:
Der
Wenn Du diese Technik in einem Batchscript ohne
Beispiel:
Gruß
Friemler
schreibe Zeile 6 folgendermaßen:
call set /a countvar!var_nr!+=1
CALL
-Befehl zwingt den Batchscript-Interpreter die Zeile zweimal zu parsen. Beim ersten parsing wird der Wert von var_nr
ermittelt und in den Kommando-String eingesetzt, beim zweiten parsing wird dann die gewünschte Variable inkrementiert.Wenn Du diese Technik in einem Batchscript ohne
ENABLEDELAYEDEXPANSION
anwendest (die Variablen werden dann ganz normal mit %
-Zeichen eingefasst), musst Du die %
-Zeichen verdoppeln.Beispiel:
set "x=5"
call set /a countvar%%x%%+=1
Gruß
Friemler
Moin .Sessl,
Wenn weder highload noch Friemler innerhalb von 4 Stunden reagieren, dann heisst das übersetzt so viel wie
Bitte investiere eine halbe Stunde eigene Gehversuche - es ist von dir lösbar.
Sonst meld dich bitte morgen nochmal, wenn es gar nicht klappt.
Grüße
Biber
Wenn weder highload noch Friemler innerhalb von 4 Stunden reagieren, dann heisst das übersetzt so viel wie
Ich geb dem jungen Padawan noch mal etwas Zeit, mein Beispiel nachzulesen und zu variieren... der schafft das schon alleine.
Bitte investiere eine halbe Stunde eigene Gehversuche - es ist von dir lösbar.
Sonst meld dich bitte morgen nochmal, wenn es gar nicht klappt.
Grüße
Biber