お世話になります。
以下のようなバッチファイルを作成しました。
-----------------------
@echo off
SET RND=%RANDOM%
echo %RANDOM%
pause
-----------------------
期待する動きとしては、バッチの実行時に毎回0~32767の
乱数のいずれかが表示されてほしいのですが、9012,9020,9023,9026のように微増していく数字が表示され、とても乱数とはいえない状態です。
ちょっとした思い違いなのかもしれませんが、行き詰まってしまっています。DONコマンド,バッチに詳しい方、ご教授ください。
No.5ベストアンサー
- 回答日時:
#3です。
>21時46分52秒の中で6回実行できましたが、%random%はその6回で全部違う値を返しています。
同じCMD.EXEの中で繰り返し%RANDOM%を参照すれば当然その度に違う値になるのは当たり前です。そのためのRANDOM機能です。
あくまで初期値の話です。
>%RANDOM% の初期値は、CMD.EXE を起動した時刻(時分秒)によって与えられるようです。
@echo %TIME% %RANDOM%
というX.BATを作って、
for /L %I in (1,1,100) do @cmd /c x.bat
でわかります。
あるいは、start & start & start として同時に複数個のコマンドプロンプトを開いて、それぞれの窓で echo %RANDOM% すれば同じ値になります。
ご回答ありがとうございます。
回答者に対するお礼の内容がちょっと食い違ってしまっていることをお詫びします、「教えて!goo」を初めて使ったもので・・・ご容赦ください。
notnotさんのおしゃるようにプロンプトを開いた時間が、最初の%RANDOM%の結果に関係していることがわかりました。
実際に%RANDOM%を使用することを考えると、おっしゃる通りcallを用いるか、バッチファイルの中でダミーの%RANDOM%を一度実行させたあとで、実際に使用する変数に2度目の%RANDOM%の代入することで回避しようと思います。
以上、ありがとうございました。
No.4
- 回答日時:
%random%の値が「時分秒」から与えられているのでないことは確かですよ。
なぜなら、echo %random% を手入力で繰り返しても、同じ1秒の中でちゃんと値が変わるからです。
たった今やってみたところ、次のようになりました。
(21:46:51) C:\tmp>echo %random%
17322
(21:46:52) C:\tmp>echo %random%
23450
(21:46:52) C:\tmp>echo %random%
9357
(21:46:52) C:\tmp>echo %random%
20766
(21:46:52) C:\tmp>echo %random%
18467
(21:46:52) C:\tmp>echo %random%
29722
(21:46:52) C:\tmp>echo %random%
26509
(21:46:53) C:\tmp>echo %random%
26588
21時46分52秒の中で6回実行できましたが、%random%はその6回で全部違う値を返しています。
No.3
- 回答日時:
%RANDOM% の初期値は、CMD.EXE を起動した時刻(時分秒)によって与えられるようです。
したがって、%RANDOM% を求めるために毎回CMD.EXEを起動すると、同じ1秒の間に起動すると同じ値が得られてしまいます。1つのバッチファイルの中で何度も%RANDOM%を求めるなら問題ないんですが。
短い時間に何度もCMD.EXEを起動してそのたびに違う乱数を得たいなら、%RANDOM%に頼る事は出来ません。vbscriptを使って、
echo randomize:WScript.Echo int(rnd*32768) >r.vbs
for /f %%A in ('cscript //nologo r.vbs') do set RND=%%A
などとする必要があります。
No.2
- 回答日時:
ようやく再現しました。
[ rand.bat ]
echo %random%
を用意して
for %f in (\winnt\system32\*) do cmd /c rand.bar
とやると(カッコの中は、何度も繰り返すのであれば何でも良いのですが)、3ないし4ずつ単調に増加する数字が表示されます。
しかし
for %f in (\winnt\system32\*) do call rand.bat
であれば、ランダムに見えるような数字が表示されます。
美しい解決方法ではありませんが、ひとまず「%random%を使いたい場所で別のバッチをcallする」という手で回避できないでしょうか。
ご回答ありがとうございます。
その後、いろいろ試した結果、xcrOSgS2wYさんのおしゃるようにプロンプトを開いた時間が、最初の%RANDOM%の結果に関係していることがわかりました。
それと質問で記述した内容が間違っていました。
正しくは以下のコードです、申し訳ありませんでした。(echoの行が間違っていました・・・)
-----------------------
@echo off
SET RND=%RANDOM%
echo %RND%
pause
-----------------------
実際に%RANDOM%を使用することを考えると、おっしゃる通りcallを用いるか、バッチファイルの中でダミーの%RANDOM%を一度実行させたあとで、実際に使用する変数に2度目の%RANDOM%の代入することで回避しようと思います。
以上、ありがとうございました。
No.1
- 回答日時:
状況が再現しませんでした。
思い違いが発生する程のコードではないので、
特別な間違いとかはないと思います。
たまたま、そのように
近い数字になったのではないでしょうか?
(%RANDOM%の仕組みについて内情はわかりませんのではっきりとは言えませんが)
%RAMDOM%の精度が悪いということであれば、
VBScriptのRND関数を使ってみてはどうでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- サーバー ログオンユーザーがいない場合に自動再起動 1 2022/09/28 09:53
- PHP PHPで訪問回数を表示するカウンタを作成したい 3 2023/05/27 07:09
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- Gmail Gメールの表示件数 Gメールのバッチの表示件数がおかしいです 例えば実際に届いてるメールが10件なの 1 2022/04/14 01:25
- PHP PHP MySql ページング 2 2022/09/20 06:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
batファイルで、call使っても戻...
-
バッチファイルを実行後、終了...
-
batファイルを実行してコマンド...
-
DOSコマンドのforで空白行をス...
-
DHCP設定バッチnetshコマンドに...
-
Windows10のタスクスケジューラ...
-
リモートデスクトップの取り合...
-
バッチ実行を意図的に失敗させ...
-
バッチでEnterを認識させ...
-
コマンドの結果を変数に入れたい
-
DBサーバとバッチサーバ
-
バッチファイルを常に管理者権...
-
バッチプログラムについて(編...
-
oracleのimp-00002エラーについて
-
バッチ実行時にバッチのファイ...
-
順番にPINGを飛ばすバッチ
-
バッチファイルでエクセルのマ...
-
WindowsServer2012で、タスクス...
-
コマンドプロンプトで最新のフ...
-
バッチを走らせてそのバッチを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10のタスクスケジューラ...
-
batファイルで、call使っても戻...
-
バッチファイルを実行後、終了...
-
リモートデスクトップの取り合...
-
DHCP設定バッチnetshコマンドに...
-
バッチプログラムについて(編...
-
バッチでEnterを認識させ...
-
バッチ実行を意図的に失敗させ...
-
DOSコマンドのforで空白行をス...
-
batファイルを実行してコマンド...
-
oracleのimp-00002エラーについて
-
コマンドの結果を変数に入れたい
-
バッチファイルを常に管理者権...
-
バッチ実行時にバッチのファイ...
-
バッチファイルでPC情報を取得する
-
batが実行できない
-
bat実行中に引数1の内容を変更...
-
WMICでリモートでバッチが実行...
-
実行結果を戻り値で取得したい
-
ログオンユーザを簡単に切り替え
おすすめ情報