Hilfe mit Batch Zufallsgenerator

Hallo, ich bräuchte Hilfe mit einer Batch Datei. Wie man sehen kann hab ich hier einen Zufallsgenerator für namen, den ich in meiner Schule verwenden will, allerdings kommt bei diesem Generator das Problem auf das sich die namen wiederholen.

Also z.B. kommt als erstes Max Mustermann dann Marianne Musterfrau und dann wieder Max Mustermann(das passiert bei 22 namen sehr oft).

Könnte mir bitte jemand diese Datei so verbessern dass schon Vorgekommene Namen wegfallen.

Ich bin Dankbar für jede Hilfe.

hier noch meine Batch Datei:

@echo off
echo.
(doppelpunkt) top
cls
Set /a r=%random% %%22
If %r%==0 echo Max Mustermann
If %r%==1 echo Marianne Musterfrau
If %r%==2 echo Manfred Musterkind
If %r%==3 echo name
If %r%==4 echo name
If %r%==5 echo name
If %r%==6 echo name
If %r%==7 echo name
If %r%==9 echo name
If %r%==10 echo name
If %r%==11 echo name
If %r%==12 echo name
If %r%==13 echo name
If %r%==14 echo name
If %r%==15 echo name
If %r%==16 echo name
If %r%==17 echo name
If %r%==18 echo name
If %r%==19 echo name
If %r%==20 echo name
If %r%==21 echo name
pause
goto top

(doppelpunkt)=wer weiss was hat das nicht richtig gemacht mit dem zeichen doppelpunkt

Guten Morgen,

da kann ich leider nicht helfen

Martin

Ich würde die gewählten Namen wegschreiben und vor Anzeige eines neuen Zufallsnamens aus dieser Datei heraus prüfen, ob es diesen Namen schon gegeben hat.

Mehr kann ich dzt nich tun!
Gutes Gelingen!
Peter

Hallo,
wenn das Zufallsergebnis ausgewählt wurde, läßt Du den Parameter einfach löschen, bevor der Zufallsgenerator erneut (diesmal aus einer kleineren Menge) auswählt.
Wenn das Programm neu startet, lädt es sich alle Parameter neu aus einem Backup Verzeichnis.
Oder jede Zufallsergebnis wird mit if then mit den vorherigen abgeglichen und danach erst ausgedruckt.
Erstmal
Arne

Hier mein Vorschlag, der für eine Klassenliste durchaus ausreichen sollte:

@Rem verwendete Variable:
@Rem l := Liste
@Rem m := Maximalanzahl
@Rem n := neue Liste
@Rem r := Zufallszahl
@Rem v := Vergleichsliste
@Rem z := Zähler

@ Echo.
@ SetLocal

Für Fragen bitte einfach melden.

@ Set m=22

@ Rem hiermit wird sichergestellt, dass die alte Liste l nicht leer ist, da es sonst zu Fehler in der Verarbeitung kommt.
@ Set l=-
@ Set z=0

(Doppelpunkt)top
@Rem If %z% neq 0 Pause
@Rem cls

@ Set /a r=%random% %%m%
@Rem Echo r : „%r%“
@Rem Echo m : „%m%“
@Rem Echo z : „%z%“
@Rem Echo l : „%l%“

(Doppelpunkt)test
@ Rem die neue Liste ist die alte Liste und die neue Zufallszahl
@ Set n=%l%%r%-

@ Rem Die Vergleichsliste wird die alte Liste.
@ Rem Falls die neue Zufallszahl in der Vergleichsliste enthalten ist, so wird diese aus der Vergleichsliste entfernt.
@ If %r% == 0 Set v=%l:-0-=-%
@ If %r% == 1 Set v=%l:-1-=-%
@ If %r% == 2 Set v=%l:-2-=-%
@ If %r% == 3 Set v=%l:-3-=-%
@ If %r% == 4 Set v=%l:-4-=-%
@ If %r% == 5 Set v=%l:-5-=-%
@ If %r% == 6 Set v=%l:-6-=-%
@ If %r% == 7 Set v=%l:-7-=-%
@ If %r% == 8 Set v=%l:-8-=-%
@ If %r% == 9 Set v=%l:-9-=-%
@ If %r% == 10 Set v=%l:-10-=-%
@ If %r% == 11 Set v=%l:-11-=-%
@ If %r% == 12 Set v=%l:-12-=-%
@ If %r% == 13 Set v=%l:-13-=-%
@ If %r% == 14 Set v=%l:-14-=-%
@ If %r% == 15 Set v=%l:-15-=-%
@ If %r% == 16 Set v=%l:-16-=-%
@ If %r% == 17 Set v=%l:-17-=-%
@ If %r% == 18 Set v=%l:-18-=-%
@ If %r% == 19 Set v=%l:-19-=-%
@ If %r% == 20 Set v=%l:-20-=-%
@ If %r% == 21 Set v=%l:-21-=-%

@Rem Echo n : „%n%“
@Rem Echo v : „%v%“

@ Rem falls die alte Liste mit der Vergleichsliste identisch ist, so befindet sich die neue Zufallszahl nicht in der alten Liste. In diesem Fall kann die neue Zufallszahl der alten Liste hinzugefügt werden.
@ If „%l%“ == „%v%“ Goto name

@ Rem Die neue Zufallszahl ist bereits in der alten Liste enthalten und wird deshalb um 1 erhöht, wenn Sie unterhalb des größten Wertes liegt.
@ If %r% lss %m% Set /a r=%r%+1
@ Rem ansonsten wird die Zahl auf 0 gesetzt
@ If %r% == %m% Set r=0

@ Goto Test

(Doppelpunkt)name
@ Rem die neue Zufallszahl der alten Liste hinzugefügt.
@ Set l=%l%%r%-

@ Rem Der Name wird ausgegeben und
@ If %r% == 0 echo Max Mustermann
@ If %r% == 1 echo Marianne Musterfrau
@ If %r% == 2 echo Manfred Musterkind
@ If %r% == 3 echo name3
@ If %r% == 4 echo name4
@ If %r% == 5 echo name5
@ If %r% == 6 echo name6
@ If %r% == 7 echo name7
@ If %r% == 8 echo name8
@ If %r% == 9 echo name9
@ If %r% == 10 echo name10
@ If %r% == 11 echo name11
@ If %r% == 12 echo name12
@ If %r% == 13 echo name13
@ If %r% == 14 echo name14
@ If %r% == 15 echo name15
@ If %r% == 16 echo name16
@ If %r% == 17 echo name17
@ If %r% == 18 echo name18
@ If %r% == 19 echo name19
@ If %r% == 20 echo name20
@ If %r% == 21 echo name21

@ Rem Der Zähler über die ausgegebenen Namen wird um 1 erhöht.
@ Set /a z=z+1

@ Rem falls noch nicht alle Namen ausgegeben worden sind, wird der nächste Name ermittelt
@ If %z% lss %m% Goto top

@ EndLocal