2016-04-18 11 views
0

このソフトウェアでランダムなファイルをスクリプトで起動しようとしていますが、唯一の問題は起動時に常に同じ乱数を選択することです。それは私のために常に41です...任意の提案ですか?私の作品ランダムファイルピッカーが各実行(同じバッチ)で同じ値をピックアップ

@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%]!" 

答えて

0

:実は

@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

は、問題が最初に考えたよりも少し紛らわしいです。このスクリプトを実行するたびに、 "!file [%rand%]!"の値と同じ値が得られますが、一定時間だけです。 私はスクリプトを実行すると、私は63を得る - それは完全に開き、これを実行します。ウィンドウを閉じて15秒後に再びスクリプトを実行すると、もう一度63になります。多分1分ほど経過した後、私はスクリプトを実行し、私は64または65を取得...スクリプトの各実行は私に乱数を与えませんが、実際にかなりの時間が経過した最後の実行...私は何が足りないのですか? – b3b0

+0

1)DOSの演算精度が低いので、ここで説明するように327以上で除算したり乗算したりしないでください。http://stackoverflow.com/a/7963196/5920627またはhttp: //stackoverflow.com/a/17639500/5920627より良い結果が得られます。 2)バッチファイルを実行すると、シードの初期化がシステム時間に基づいて行われるため、時間が変更されるまで(秒数)同じ番号が生成されます。 – kay27

+0

私は%time%変数をテストし、最後の2文字が秒の小数部分であることを発見したので、ランダムジェネレータのシード値をより頻繁に(1秒の代わりに100回)変更することができました。 ...ダウンロードした\ Nintendo dirが私のfsにないので、私はc:\ windowsを使ってテストしました。そして、今度は新しいファイル名を表示します。 – kay27

関連する問題