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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 281994
Url: https://administrator.de/contentid/281994
Printed on: April 23, 2024 at 23:04 o'clock
3 Comments
Latest comment
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:
Gruß
...
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ß
...