2016-04-18 9 views
0

Ich versuche, eine zufällige Datei mit dieser Software über ein Skript zu starten - das einzige Problem ist, dass dieses Skript immer die gleiche Zufallszahl bei jedem Start wählt. Es ist immer 41 für mich ... Irgendwelche Vorschläge?Zufallsauswahl für die Dateiauswahl Gleiche Werte bei jeder Ausführung (Batch)

@echo on 
setlocal EnableDelayedExpansion 
cd C:\Users\User\Documents\Downloads\Nintendo 
set n=0 
for %%f in (*.*) do (
    set /A n+=1 
    set "file[!n!]=%%f" 
) 
set /A "rand=%random% * 100/32768+1" 
"C:\Users\User\Downloads\fceux-2.2.2-win32\fceux.exe" "!file[%rand%]!" 

Antwort

0

Das funktioniert für mich:

@echo off 
setlocal enabledelayedexpansion 
c: 
cd \windows 

for %%f in (*.*) do (
    set /A n+=1 
    set "file[!n!]=%%f" 
) 

rem change random seed value 
for /l %%i in (0,1,%time:~-2%) do set /A tmp=!random! 

set /A rand=!random! %% n-1 
echo "!file[%rand%]!" 
+0

Eigentlich ist das Problem ein wenig mehr verwirrend als erster Gedanke. Jedes Mal, wenn ich dieses Skript ausführe, bekomme ich den gleichen Wert für "! File [% rand%]!", Aber nur für eine bestimmte Zeit. Lassen Sie uns sagen, dass ich das Skript ausführen, bekomme ich 63 - es öffnet und führt dies einwandfrei. Ich schließe das Fenster und führe das Skript fünfzehn Sekunden später wieder aus, ich bekomme wieder 63. Nach etwa einer Minute laufe ich das Skript, und ich bekomme 64 oder 65 ... jede Ausführung des Skripts gibt mir keine Zufallszahl, ist aber ziemlich vorhersehbar, je nachdem, wie viel Zeit seit dem letzten Mal vergangen ist letzte Hinrichtung ... Was fehlt mir? – b3b0

+0

1) es ist eine niedrige Genauigkeit der DOS-Arithmetik, also nicht multiplizieren/dann/dividieren, teilen Sie einfach durch 327 oder besser tun Sie, wie hier beschrieben: http://StackOverflow.com/A/7963196/5920627 oder hier: http: //stackoverflow.com/a/17639500/5920627 und Sie erhalten ein besseres Ergebnis; 2) Wenn Sie Ihre Batch-Datei ausführen, gibt es eine Initialisierungsinitialisierung, basierend auf der Systemzeit, so dass sie dieselbe Nummer erzeugt, bis sich die Zeit ändert (Anzahl der Sekunden). – kay27

+0

Ich habe% time% Variable getestet und festgestellt, dass die letzten 2 Zeichen Bruchteil von Sekunden sind, so könnte es verwendet werden, Zufallsgenerator Seed Wert häufiger zu ändern (100 mal pro Sekunde statt 1), so aktualisierte ich meine Antwort ... Ich habe keine Downloads \ Nintendo-Anleitung in meinem fs, also habe ich C: \ Windows zum Testen benutzt und jetzt zeigt es jedes Mal einen neuen Dateinamen – kay27