patrick24
Goto Top

Batch max. Speicherkapazität einer Variable

Hi,
ich schreibe gerade eine Batch wo voraussichtlich sehr große Zahlen in einer Variable gespeichert werden sollen (so ca.120 stelig mindestens). Jetzt wäre meine Frage ob es bei Variablen eine max. Speicherkapazität gibt und ob es ein Limit an Variablen gibt.

LG
Patrick

Content-Key: 522226

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: 141965
141965 05.12.2019 aktualisiert um 21:52:54 Uhr
Goto Top
https://stackoverflow.com/questions/40295503/windows-batch-variables-siz ...
The maximum for a numeric variable in batch is 2^31.
Mitglied: rubberman
rubberman 05.12.2019 um 22:21:44 Uhr
Goto Top
The maximum for a numeric variable in batch is 2^31.
Nicht ganz. Der größte Wert der als Zahl geparst werden kann ist 2^31 - 1. Aber das ist Erbsenzählerei.
Variablen in Batch sind immer Umgebungsvariablen. Und der Wert von Umgebungsvariablen ist immer ein String (Text). Strings haben ein Limit von 8191 Zeichen in Batch. Wobei die Zeichen der Codezeile mit zählen.
Lediglich bestimmte Kommandos führen eine interne Konvertierung von numerischen Strings zu ganzen Zahlen aus. Neben SET /P, sind das IF, FOR /F, FOR /L, EXIT /B, TIMEOUT, CHCP, MORE, FC und einige mehr.
Wie auch immer, keines dieser Kommandos würde in der Lage sein einen 120 Zeichen langen Sting in eine Zahl zu konvertieren.

Steffen
Mitglied: erikro
erikro 06.12.2019 um 09:21:45 Uhr
Goto Top
Moin,

nimm die Powershell. Da hat der decimal einen maximalen Wert von 79.228.162.514.264.337.593.543.950.335. Das sollte reichen. face-wink

Liebe Grüße

Erik
Mitglied: erikro
erikro 06.12.2019 um 09:22:54 Uhr
Goto Top
Moin,

Zitat von @rubberman:
Lediglich bestimmte Kommandos führen eine interne Konvertierung von numerischen Strings zu ganzen Zahlen aus. Neben SET /P, sind das IF, FOR /F, FOR /L, EXIT /B, TIMEOUT, CHCP, MORE, FC und einige mehr.
Wie auch immer, keines dieser Kommandos würde in der Lage sein einen 120 Zeichen langen Sting in eine Zahl zu konvertieren.

Was dann aber heißt, dass Vergleiche Sortierung nicht mehr numerisch, sondern alphanumerisch erfolgen und man auch nicht mit den Zahlen rechnen kann.

Liebe Grüße

Erik
Mitglied: rubberman
rubberman 06.12.2019 um 10:15:13 Uhr
Goto Top
Korrekt. Ich dachte das wäre bereits klar geworden. Im Regelfall reden wir von einem Signed Integer mit 32 Bit Breite. Darüber hinaus wird nichts implizit zu einer Zahl konvertiert.

Steffen
Mitglied: Patrick24
Patrick24 06.12.2019 um 17:46:23 Uhr
Goto Top
Also würde es nicht gehen?
Oder könnte ich die Zeichen in verschiedenen Variablen getrennt verarbeiten?
Gibt es ein max. für die Anzahl von Variablen?

LG
Patrick
Mitglied: rubberman
rubberman 06.12.2019 um 19:12:30 Uhr
Goto Top
Also würde es nicht gehen?
Was würde denn nicht gehen? Vielleicht erklärt du mal was du eigentlich vorhast, damit dir zu helfen ist. Sonst wird das nix.

Steffen
Mitglied: Patrick24
Patrick24 06.12.2019 um 22:29:02 Uhr
Goto Top
Ich will mit Batch ein Spiel machen (nein ich bin nicht verückt und ja ich weiß das Batch für Spiele ungeeignet ist, ich hab einfach nur viel zu viel Zeit ;))
Bei dem Spiel soll es auch eine Speicherfunktion geben die alle Werte in eine Variable speichert und dann die Daten codiert in einer txt speichert. Jetzt wird der Code für die Spielstände schon uncodiert sehr lang sein und deswegen meine Frage mit dem max. Kapazität der Variablen und Anzahllimit von Variablen.

LG
Patrick
Mitglied: rubberman
rubberman 06.12.2019 um 23:13:55 Uhr
Goto Top
Immer noch viel zu unspezifisch. Aber wie auch immer, du hast 8191 Zeichen in einer Variablen zur Verfügung. Wofür du für Spielstände eine Variable in der Größe brauchst, erschließt sich mir aber absolut nicht. Speichern kannst du sie sowieso nur in einer Datei.

Steffen
Mitglied: Patrick24
Patrick24 07.12.2019 um 14:03:14 Uhr
Goto Top
8191 Zeichen sollten reichen.
Wäre zu komleziert hier alles genau zu erklären ;)
Kann man unendlich viele Variablen erzeugen?
Mitglied: rubberman
rubberman 07.12.2019 aktualisiert um 14:15:02 Uhr
Goto Top
Du kannst deinen Arbeitsspeicher voll machen. Das hat nichts mit der Anzahl der Variablen zu tun.
Aber wie gesagt, für mich klingt das alles so, als würdest du in eine völlig falsche Richtung laufen. Aber wenn du es nicht erklären kannst/willst ist dir sowieso nicht zu helfen.

Steffen
Mitglied: 141965
141965 07.12.2019 aktualisiert um 17:15:23 Uhr
Goto Top
Zitat von @Patrick24:
Kann man unendlich viele Variablen erzeugen?
Wenn man so extrem viele Variablen anlegen will ist die Programmierung offensichtlich schon ineffektiv geplant, meist resultierend aus Unkenntnis.

Aber wie gesagt, für mich klingt das alles so, als würdest du in eine völlig falsche Richtung laufen.
Dito.

Sowas noch auf Batchbasis zu machen , wäre mir die Zeit zu schade, da kann man die vergeudete Zeit wesentlich besser nutzen, z.B. um diese in Programmierung von nachhaltigen Lösungen zu stecken, anstatt Zeit und Strom mit nutzlosen Spielen zu vergeuden.
Mitglied: Patrick24
Patrick24 07.12.2019 um 18:52:53 Uhr
Goto Top
Ich weiß das Batch für Spiele nicht geeignet ist. Ich will einfach nur mich einbischen mit Batch beschäftigen und ein kleines Game programmieren. Würde ich wirklich ein ernsthafte Spiel entwickeln wollen würde ich schon auf java,c++ usw. zurückgreifen. Das mit dem Variablen Limit wollte ich nur wissen das es später nicht zu Problem kommt (natürlich brauche ich nicht 2000 Variablen, es ging nur darum ob es ein Limit von z.B. 30,40,50 oder 100 gibt)

LG
Patrick
Mitglied: rubberman
rubberman 08.12.2019 um 13:58:14 Uhr
Goto Top
Unter XP oder noch älteren Windows Versionen (kann mich nicht erinnern) gab es eine Beschränkung für die Größe des Environments eines Prozesses. Die gibt es nicht mehr. Du bist aber nach wie vor von der Größe des Arbeitsspeichers beschränkt. Eine Umgebungsvariable besteht aus "Name=Wert\0". Das \0 ist das Abschlusszeichen eines Strings im Speicher. Jedes Zeichen im Windows Environment ist UTF-16 codiert. Das heißt in der Regel werden 2 Bytes pro Zeichen in Anspruch genommen. Wie schnell du deinen Arbeitsspeicher voll bekommst, hat also nichts mit der Anzahl der Variablen zu tun, sondern mit der Länge der Variablennamens und der Werte. 100 Variablen sind aber trotzdem lediglich Peanuts. Nach wie vor gilt aber, je größer das Environment wird, desto länger dauert es bis der Prozess die Variablen und Werte dort findet. Da Batch ohnehin eine grottenschlechte Performance hat und du an allen Ecken und Enden auf seine Grenzen stößt, ist das aber vermutlich auch egal. Wie du selbst schon eingesehen hast, ist Batch die mit Abstand schlechteste Entscheidung ein Spiel zu entwickeln. Nicht nur dass du das was du dort schreibst nicht mal in eine andere Sprache transferieren kannst (die Syntax von Batch ist mit keiner anderen Sprache vergleichbar), vermutlich versaust du dir durch die exzessive Verwendung von GOTO auch noch den Stil und die Denkweise wie ein Programmfluss auszusehen hat, sodass du in anderen Sprachen gar nicht weißt wie du ohne auskommen kannst...

Steffen
Mitglied: Patrick24
Patrick24 08.12.2019 um 16:38:56 Uhr
Goto Top
Sieh mein vorhaben mit den Batch Game einfach als kleine Challenge für nebenbei an. In anderen Sprachen komme ich auch ohne GO TO klar sonst würde ich java wohl nicht beherrschen.

LG
Patrick