metzger-mcp
Goto Top

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 ? face-sad 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 face-smile

Mfg Metzger

Content-ID: 36346

Url: https://administrator.de/contentid/36346

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

Biber
Biber 20.07.2006 um 09:06:59 Uhr
Goto Top
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!"
@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
)
-oder-
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 
-oder/und-
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
Metzger-MCP
Metzger-MCP 20.07.2006 um 11:02:10 Uhr
Goto Top
Das mit dem

setlocal EnableDelayedExpansion

kannte ich garnicht.

Gibt es da noch andere Befehle / Schlüssel ?

MFG Metzger
maneich
maneich 20.07.2006 um 18:45:59 Uhr
Goto Top
Hallo,

ohne das weitere zu überprüfen, testest Du das Script genau so wie es hier steht?

Dann solltest Du mal bei "%%a ein Leerzeichen dazwischen machen " %%a.

MfG maneich
Biber
Biber 20.07.2006 um 18:54:32 Uhr
Goto Top
@maneich
face-wink 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
Metzger-MCP
Metzger-MCP 21.07.2006 um 01:08:20 Uhr
Goto Top
Also mein Waaahnsinige Batchdatei ist fertig !
Sie geht auch gut face-smile

Ich danke euch auf jeden Fall face-smile

Mfg Metzger