Forschleife mit Anweisungsblock klappt nicht warum auch immer
Hallo ! ich hätte da mal ne Frage
Geht es eigentlich nicht das ich statt einer Anweisung einen Anweisungsblock nach einer For Schleife abarbeiten kann ? Habe jetzt ein ganzes Wochenende geknobbelt und getüfftelt und habe es trotzdem zum verrecken nicht hinbekommen.
Einen Anweisungsblock zu bekommen, in dem auch die %% Variablen die Werte in den einzelnen For durchgängen behalten haben.
Ich möchte innerhalb einer Forschleife nicht nur eine Anweisung sondern ein Anweisungsblock abarbeiten.
Mein Beispiel
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do
(
set za1= %%a
set zb2= %%b
set zc3= %%c
set zd4= %%d
if /i %za1% LSS %za2% set /p wert1= %za1% + %za2%
if /i %za2% LSS %za3% set /p wert2= %za2% + %za3%
if /i %za3% LSS %za4% set /p wert3= %za3% + %za4%
Echo %za1% %za2% %za3% %za4% >> information.txt
Echo %wert1% %wert2% %wert3% >> information2.txt
)
habe es auch wie folgt probiert, da wurden aber nicht die Variablen %%... übermittelt.
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do call :for1
:
:for1
set zd4= %%d
if /i %za1% LSS %za2% set /p wert1= %za1% + %za2%
Echo %za1% %za2% %za3% %za4% >> information.txt
goto ende
:ende
@ Biber so habe ich nun gemacht
Mfg Metzger
Geht es eigentlich nicht das ich statt einer Anweisung einen Anweisungsblock nach einer For Schleife abarbeiten kann ? Habe jetzt ein ganzes Wochenende geknobbelt und getüfftelt und habe es trotzdem zum verrecken nicht hinbekommen.
Einen Anweisungsblock zu bekommen, in dem auch die %% Variablen die Werte in den einzelnen For durchgängen behalten haben.
Ich möchte innerhalb einer Forschleife nicht nur eine Anweisung sondern ein Anweisungsblock abarbeiten.
Mein Beispiel
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do
(
set za1= %%a
set zb2= %%b
set zc3= %%c
set zd4= %%d
if /i %za1% LSS %za2% set /p wert1= %za1% + %za2%
if /i %za2% LSS %za3% set /p wert2= %za2% + %za3%
if /i %za3% LSS %za4% set /p wert3= %za3% + %za4%
Echo %za1% %za2% %za3% %za4% >> information.txt
Echo %wert1% %wert2% %wert3% >> information2.txt
)
habe es auch wie folgt probiert, da wurden aber nicht die Variablen %%... übermittelt.
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do call :for1
:
:for1
set zd4= %%d
if /i %za1% LSS %za2% set /p wert1= %za1% + %za2%
Echo %za1% %za2% %za3% %za4% >> information.txt
goto ende
:ende
@ Biber so habe ich nun gemacht
Mfg Metzger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 36346
Url: https://administrator.de/contentid/36346
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
5 Kommentare
Neuester Kommentar
Moin Metzger-MCP,
der FOR-Block besteht, auch wenn Du ihn wegen Lesbarkeit und Übersichtlichkeit optisch auf mehrere zeilen auseinandergezogen hast, für dem CMD-Interpreter aus einer Zeile.
Dementsprechend werden die in der einen Anweisungszeile enthaltenen Variablen einmal aufgelöst.
Zwei, drei Umgehungsvarianten:
a) Verzögerte Variablenauflösung / DelayedExpansion.
Muss "deklariert" werden.
Variablenschreibweise ändert sich von "%var%" auf "!var!"
-oder-
b) aus der For-Anweisung einen Unterblock CALLen:
-oder/und-
c) auf ein paar Variablen-Umschaufelungen verzichten:
Unter Forumssuche "DelayedExpansion" findest Du mehr.
Ebenso unter CMD /? und IF /? unter demselben Stichwort.
HTH Biber
der FOR-Block besteht, auch wenn Du ihn wegen Lesbarkeit und Übersichtlichkeit optisch auf mehrere zeilen auseinandergezogen hast, für dem CMD-Interpreter aus einer Zeile.
Dementsprechend werden die in der einen Anweisungszeile enthaltenen Variablen einmal aufgelöst.
Zwei, drei Umgehungsvarianten:
a) Verzögerte Variablenauflösung / DelayedExpansion.
Muss "deklariert" werden.
Variablenschreibweise ändert sich von "%var%" auf "!var!"
@echo off % setlocal EnableDelayedExpansion
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do (
set za1= %%a
set zb2= %%b
set zc3= %%c
set zd4= %%d
if /i !za1! LSS !za2! set /a wert1= !za1! + !za2!
if /i !za2! LSS !za3! set /a wert2= !za2! + !za3!
if /i !za3! LSS !za4! set /a wert3= !za3! + !za4!
Echo !za1! !za2! !za3! !za4! >> information.txt
Echo !wert1! !wert2! !wert3! >> information2.txt
)
b) aus der For-Anweisung einen Unterblock CALLen:
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do call :sub %%a %%b %%c %%d
goto :eof
::~~~~~~~Ende des Batches ~~ danach kommt eine sub-"Routine"
:sub
:: ######## aus %%a, %%b ....werden Parameter %1, %2....
set za1= %1
set zb2= %2
set zc3= %3
set zd4= %4
if /i %za1% LSS %za2% set /a wert1= %za1% + %za2%
if /i %za2% LSS %za3% set /a wert2= %za2% + %za3%
if /i %za3% LSS %za4% set /a wert3= %za3% + %za4%
Echo %za1% %za2% %za3% %za4% >> information.txt
Echo %wert1% %wert2% %wert3% >> information2.txt
goto :eof
:: ~~~~~~~~~ Ende von Block "sub"; zurück zum CALLer
c) auf ein paar Variablen-Umschaufelungen verzichten:
@echo off & setlocal EnableDelayedExpansion
for /F "eol=; tokens=1,2,3,4* delims=. "%%a in (Datenzusammenstellung.txt) do (
set za1= %%a
set zb2= %%b
set zc3= %%c
set zd4= %%d
if /i %%a LSS %%b set /a wert1=%%a% + %%b
if /i %%b LSS %%c set /a wert2= %%b + %%c
if /i %%c LSS %%d set /p wert3= %%c + %%d
Echo %%a %%b %%c %%d >> information.txt
Echo !wert1! !wert2! !wert3! >> information2.txt
)
Unter Forumssuche "DelayedExpansion" findest Du mehr.
Ebenso unter CMD /? und IF /? unter demselben Stichwort.
HTH Biber
@maneich
Nein, getestet hab ich nichts davon...bei uns war/ist es viel zu warm zum Testen.
Sollte nur eine Skizze sein - hab ich (wieder mal) vergessen dranzuschreiben.
Ansonsten arbeite sogar ich manchmal mit Copy&Paste, auch wenn ich immer immer wieder sage, dass dabei nur vorhandene Fehler potentiert werden.
@Metzger-MCP
Schau Dir mal die (neueren) M$-Hilfen zu CMD, IF, CALL, SETLOCAL, FOR ...an.
Was hier so gepostet wird, ist in der Regel nichts Undokumentiertes.
Gruß
Biber
Nein, getestet hab ich nichts davon...bei uns war/ist es viel zu warm zum Testen.
Sollte nur eine Skizze sein - hab ich (wieder mal) vergessen dranzuschreiben.
Ansonsten arbeite sogar ich manchmal mit Copy&Paste, auch wenn ich immer immer wieder sage, dass dabei nur vorhandene Fehler potentiert werden.
@Metzger-MCP
Schau Dir mal die (neueren) M$-Hilfen zu CMD, IF, CALL, SETLOCAL, FOR ...an.
Was hier so gepostet wird, ist in der Regel nichts Undokumentiertes.
Gruß
Biber