klimator

Batchfile MSDOS - Berechnung in verschachtelter FOR-Schleife

Hallo zusammen,

ich möchte in einer dreifach verschachtelten FOR-Schleife eine Berechnung auf Grundlage der drei hochgezählten Variablen vornehmen, doch es funktioniert leider nicht. Beispiel: Aus den Variablen j (2004), m (8) und t(6) - die Variablen stehen für Jahr, Monat, Tag - soll eine Datum-ID berechnet werden --> 20040806

Erst kam bei mir immer die Fehlermeldung "Fehlender Operand", nun blitzt beim Ausführen der .bat - Datei via Explorer immer nur kurz die Konsole auf und schließt dann wieder, ohne dass ich sehen kann, was das Programm tatsächlich macht. Kann mir jemand sagen, woran das liegt bzw. warum das nicht klappt?

__________________________
@echo ON

for /L %%j in (2001,1,2010) do (
for /L %%m in (1, 1, 12) do (
for /L %%t in (1, 1, 31) do (

set /a datumid=(%j%*10000)+(%m%*100)+(%t%)
echo %datumid%

)
)
)
____________________________

Danke!
Klimator
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 281994

Url: https://administrator.de/forum/batchfile-msdos-berechnung-in-verschachtelter-for-schleife-281994.html

Ausgedruckt am: 13.07.2025 um 01:07 Uhr

miniversum
Lösung miniversum 04.09.2015 aktualisiert um 16:32:16 Uhr
Hallo,

Grundsätzlich ist es besser eine Batch immer in der Eingabeaufforderung auszuführen, da sonst nur ein kurzes Fenster zu sehen ist, wie du gemerkt hast.
So bekomms tdu auch die Fehlermeldungen und den Ablauf zu sehen.

For und Klammern vertragen sich nicht so gut.
Dazu kommt noch die Tatsache das innerhalb ein For Blockes Variabeln nicht aufgelöst werden. Hierfür müsstest du die verzögerte auflösung aktivieren (Stichwort: setlocal enabledelayedexpansion).

Alternativ übergibst du die 3 Variablen einer Unterprozedur die immer wieder aufgerufen wird. In dieser kannst Du dann auch normal rechnen und Ausgaben machen.
Das wäre dann so:
ECHO ON

for /L %%j in (2001,1,2010) do (
for /L %%m in (1, 1, 12) do (
for /L %%t in (1, 1, 31) do (

call:rechne %%j %%m %%t


)
)
)
goto:eof


:rechne
set /a datumid=(%1*10000)+(%2*100)+(%3)
echo %datumid%
goto:eof

Gruß
...
Klimator
Klimator 04.09.2015 aktualisiert um 15:58:14 Uhr
Hi,

aha, Danke für die Hilfe, es funktioniert!! Allerdings wenn ich den Code noch um eine weitere Variable erweitere:

for /L %%j in (2009,1,2010) do (
for /L %%m in (1,1,12) do (
for /L %%t in (1,1,31) do (
for /L %%s in (0,1,23) do (

call:rechne %%j %%m %%t %%s


)
)
)
goto:eof


:rechne
set /a datumid=(%1*1000000)+(%2*10000)+(%3*100)+(%4)
echo %datumid%
goto:eof

dann kommt die Fehlermeldung:

"+(*10000)+(*100)+(*)" kann synthaktisch an dieser Stelle nicht verarbeitet werden.

Liegt es evtl. daran, dass noch zwei Stellen in der Berechnung hinzugekommen sind und dass das der Rechner nicht packt?


Besten Gruß
Klimator
Klimator
Klimator 04.09.2015 um 16:31:35 Uhr
Ich habe es selber gefunden, es hat noch eine Klammer gefehlt in Zeil 12, da ich noch eine vierte Schleife aufgemacht habe.
Problem gelöst.