zockervogel
Goto Top

Random Befehl - Verhalten bei Aufruf durch die Aufgabenplanung

Hallo,
ich habe eine Batch-Datei erstellt. (SET /A "Zahl = %RANDOM% %% 9000")

Wenn ich diese Batch-Datei in einem Konsolenfenster mehrfach nacheinander starte, bekomme ich auch auch unterschiedliche Zahlen.

Wenn ich exakt die gleiche Batch-Datei über die Aufgabenplanung durch 3 erstellte Aufgaben mit jeweils 10 Sekunden Verzögerung starte, erhalte folgende Ergebnisse:

1. Zahl 4877 (ungefähre Zahl)
2. Zahl 4887
3. Zahl 4897

Warum verhält sich ein Batch mit dem Random Befehl in der Aufgabenplanung total anders als bei Start in einem Konsolenfenster ?

mfg
Peter

Content-ID: 535306

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

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

rubberman
Lösung rubberman 16.01.2020 aktualisiert um 00:13:51 Uhr
Goto Top
Wenn ich diese Batch-Datei in einem Konsolenfenster mehrfach nacheinander starte, bekomme ich auch auch unterschiedliche Zahlen.
Weil die Batchdatei immer wieder im gleichen cmd.exe Prozess (der deines Konsolefensters) ausgeführt wird. Der Nummerngenerator wurde einmal für den Prozess initialisiert und generierte Nummern sind dann das Seed für weitere Aufrufe der internen Funktion für Pseudo-Zufallszahlen.

Deine Beispielwerte zeigen was passiert wenn dasselbe Script jeweils in einem neuen cmd.exe Prozess ausgeführt wird. Hier wird auch sichtbar mit was der Nummerngenerator initialisiert wird, nämlich mit der Systemzeit.

Wie gesagt, der vorangegangene Wert ist das Seed für den nächsten Aufruf. Und dieser erste Wert ist ein anderer, auch wenn sich der absolute Wert nur geringfügig ändert, sofern du sicherstellen kannst, dass das Script nicht tatsächlich zwei mal exakt gleichzeitig gestartet wird. Dieses Verhalten kannst du nutzen, indem du erst mal einen Aufruf ins Nirvana schickst und den nächsten Wert nutzt.
Bspw:
rem %RANDOM%
SET /A "Zahl = %RANDOM% %% 9000"  
Das wird die Verteilung etwas verbessern. Es bleiben aber Pseudo-Zufallszahlen die aus einem relativ einfachen Algorithmus heraus erzeugt werden und somit nie zufällige Zahlen sind.

Steffen
Zockervogel
Zockervogel 16.01.2020 um 00:27:16 Uhr
Goto Top
vielen Dank !!

Das klappt so wie ich mir das vorgestellt habe

mfg
Peter
DerWoWusste
DerWoWusste 16.01.2020 um 09:04:32 Uhr
Goto Top
Du kannst Dir auch powershell anschauen: get-random sollte anders arbeiten.