Cmd 8-stellig Zufallszahlen?

4 Antworten

Man erzeuge zwei 4-Stellige Zufallszahlen und kombiniere diese...

  rem Zufallszahl zwischen 1000 und 9999 (Keine führernde 0)
set /a "rnd01=%random% %% 9000 + 1000"
  rem Zufallszahl zwischen 10000 und 19999 , die ist  jetzt 5-Stellig, wir wollen aber auch gegebenenfalls führende Nullen...
set /a "rnd02=%random% %% 10000 + 10000"
  rem ...also schneiden wir  die erste Ziffer vom 2. Teil unseres langen Random brutal ab und behalten  die letzten 4 Ziffern
  rem das ganze noch zusammenfiedeln
set "longRandom=%rnd01%%rnd02:~-4%"

echo Zufallszahl 1 = %rnd01%
echo Zufallszahl 2 = %rnd02%
echo beide vereint = %longRandom%

pause

...wäre ja echt blöd wenn man das ganze Gerommel wieder und wieder aufschreiben müsste, deshalb eine Variante mit Subroutine.

@echo off
  rem Subroutine :getRnd_8 mit Namen der Zielvariable aufrufen
call :getRnd_8 meineVariable
echo %MeineVariable%

call :getRnd_8 andereVariable
echo %andereVariable%

   rem Array  mit 8-Stelligen Zufallszahlen erstellen
for /l %%a in (1,1,9) do (
    call :getRnd_8 meinArray[%%a]
)

  rem Array anzeigen
set "meinArray"

pause
exit /b

::::::::  Subroutines  :::::::

:getRnd_8 %1=VariableName
set /a "rnd01=%random% %% 9000 + 1000 , rnd02=%random% %% 10000 + 10000"
set "%~1=%rnd01%%rnd02:~-4%"
exit /b

zuguteerletzt noch eine MakroVariante (Makros haben keine Call-verzögerung und sind sehr schnell)

@echo off
setlocal enableDelayedExpansion
  rem Wer hat schon Lust  jedesmal  das  ganze Prozedere  für  jede Neue Zufallszahl zu schreiben..
  rem also  bauen wir  ein leicht abrufbares makro
set "GetRand_8=set /a "rnd01=^^!random^^! %% 9000 + 1000,rnd02=^^!random^^! %% 10000 + 10000" & set "Rand_8=^^!rnd01^^!^^!rnd02:~-4^^!""

%GetRand_8% 
echo neuer  Rand_8= %Rand_8%

%GetRand_8% 
echo neuer  Rand_8= %Rand_8%

%GetRand_8% 
echo neuer  Rand_8= %Rand_8%

  rem der Aufruf des Makros geht auch innerhalb  einer Schleife geht  auch in einer Schleife
for /l %%a in (1,1,100) do (
   %GetRand_8% 
    echo neuer  Rand_8[%%a]=!Rand_8!
)


pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel  14.06.2020, 19:30

Ps mit Bindestrich in der Mitte:

set "longRandom_Bs=%rnd01%-%rnd02:~-4%
1

Ich habe vor einiger Zeit bereits auf eine ähnliche Frage geantwortet (https://www.gutefrage.net/frage/batchdatei-hoehere-zufallswert-als-32768#answer-336018767) mithilfe von diesem Code kannst du ganz einfach eine achtstellige Zufallszahl erzeugen, oder 2 vierstellige mit einem Bindestrich aneinanderhängen:

@echo off
call :randomNumber 4
set "n=%return%"
call :randomNumber 4
set "n=%n%-%return%"
echo %n%
pause & exit

:: returns random number (base 10) with %~1 digits.
:randomNumber <digits>
    setlocal enableDelayedExpansion
        set "return="
        for /L %%i in (1,1,%~1) do (
            set /a "r = (10 * !random!) / 32768"
            set "return=!return!!r!"
        )
    endlocal & set "return=%return%"
exit /b

CMD aufmachen, vier mal irgendwie aufs Numpad drücken, dann ein Minuszeichen eingeben und dann noch viermal aufs Numpad.

Svppe72 
Fragesteller
 14.06.2020, 16:18

in einer .bat datei.

wenn ich die Datei öffne, soll immer eine andere Zahl kommen.

0
NianMao  14.06.2020, 16:27

😁😂

0

Hier mal die Zufallszahl
@echo off
set Augen=99999999
set /a wurf =%random% %%Augen%
echo %wurf%
pause
Dies erzeugt ein Zufallszahl zwischen 0 und 9999 9999
Die Formatierung auf xxxx-xxxx ist nun ein weiterer Schritt.
Wenn es mindestens mit einer 8stelligen Zufallszahl losgehen soll dann musst du

@echo off
set Augen=89999999
set /a wurf =%random% %%Augen%+10000000
echo %wurf%pause

Erzesel  14.06.2020, 17:56

nein kann nicht Gehen die höchste Zufallszahl in Batch ist 32767... der Zauber mit VB-/JScript ist hier nicht nötig...

2
IchMalWiederXY  15.06.2020, 12:25
@Erzesel

..man muss natürlich aus dem Beispiel die Ziffern anpassen um auf den eigenen Fall anzupassen. Das Beispiel ist umfangreicher, als tatsächlich benötigt. Hier gilt es die Lösung auf den eigenen Wunsch abzuändern. Soviel Eigeninitiative darf man erhoffen.

0
Erzesel  15.06.2020, 13:48
@IchMalWiederXY
Dies erzeugt ein Zufallszahl zwischen 0 und 9999 9999

Du führst ein Modulo 99999999 auf eine Zahl von maximal 32767 aus. Es hat nichts mit der Anpassung einiger Ziffern zu tun, sondern bestenfalls das ignorieren der mathematischen Tatsache, das Modulo der Divisionsrest ist und für alle Divisoren größer als der Dividend immer den Betrag des Divideten ergibt ....als max 32767.

Da kommt nie ein 8stelliges Ergebnis...

Egal wie Unfangreich Du eine Demo gestaltest, sie muss mathematisch und logisch richtig sein. Ansonsten ist sie wertlos.

Die Hilfesuchenden hier im GF sind in der Regel Anfänger, welche bei einem falschen Ansatz anpassen können wie sie wollen, es führt nie zum gewünschten Ergebnis .

Du hast ja wohl auch nur angepasst ohne dein Beispiel zu verifizieren.

Es ist nicht böse von mir gemeint, wenn ich Kritik übe, hilft es doch zukünftig Fehler zu vermeiden.

1