batch-file
बैच फ़ाइलों में यादृच्छिक
खोज…
रैंडम नंबर
गतिशील चर %Random%
का उपयोग करके, हम 0 से 32767 तक एक यादृच्छिक पूर्णांक प्राप्त कर सकते हैं। उदाहरण के लिए:
echo %random%
यह स्पष्ट रूप से, 0 से 32767 तक पूर्णांक देता है। लेकिन कभी-कभी हम चाहते हैं कि यह एक विशिष्ट सीमा में हो, 1 से 100 तक कहे।
विशिष्ट रेंज के भीतर यादृच्छिक संख्या उत्पन्न करना
ऐसा करने की मूल विधि नीचे सूचीबद्ध है।
set /a result=(%RANDOM%*max/32768)+min
जहां max
शीर्ष संख्या है जिसे उत्पन्न किया जा सकता है, और min
उत्पन्न होने वाली न्यूनतम संख्या है। ध्यान दें कि आपको कोई दशमलव संख्या नहीं मिलेगी क्योंकि स्वचालित रूप से set /a
राउंड नीचे है। दशमलव यादृच्छिक संख्या उत्पन्न करने के लिए, इसे आज़माएँ:
set /a whole=(%RANDOM%*max/32768)+min
set /a decimal=(%RANDOM%*max/32768)+min
echo %whole%.%decimal%
32767 से बड़ी रैंडम संख्या उत्पन्न करना
अगर तुम कोशिश करो
set /a whole=(%RANDOM%*65536/32768)+1
आप सबसे अधिक संभावना है कि यादृच्छिक संख्या प्राप्त करेंगे जो विषम हैं।
32767 से बड़ी संख्या उत्पन्न करने के लिए, यहाँ एक बेहतर तरीका है।
set /a result=%random:~-1%%random:~-1%%random:~-1%%random:~-1%%random:~-1%%random:~-1%
पिछला कोड प्रत्येक %random%
से 1 वर्ण निकालता है। लेकिन यह उद्देश्य पर किया जाता है।
चूंकि random
संख्या एक अंक की संख्या हो सकती है, अंतिम 2 अंक निकालने से काम नहीं होगा। इसलिए हम केवल अंतिम चरित्र को निकालते हैं। इस स्थिति में, हमारे पास 6 %random:~-1%
, जो अधिकतम 999999
उत्पन्न करता है, और न्यूनतम at 000000
, आपको अपनी आवश्यकताओं के अनुरूप इसे समायोजित करने की आवश्यकता हो सकती है।
pseudorandom
cmd.exe
, cmd
अनुभाग शुरू होने के समय के आधार पर बीज उत्पन्न करता है, इसलिए यदि आप लगभग उसी समय उत्परिवर्ती खंड शुरू करते हैं, तो परिणाम पर्याप्त रूप से 'यादृच्छिक' नहीं हो सकता है।
यादृच्छिक अक्षर
दुर्भाग्य से, बैच निर्मित एक विधि अक्षर उत्पन्न करने के लिए नहीं है, लेकिन का उपयोग कर %random%
और for
पाश, हम अक्षर 'उत्पन्न' कर सकते हैं।
यह एक सरल विचार है कि यह कैसे काम करता है।
set /a result=(%random%*26/32768)+1
for /f "tokens=%result%" %%I in ("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z") do (
echo %%I
)
- पहला
set /a
स्टेटमेंट 1 से 26 के बीच एक यादृच्छिक संख्याN
उत्पन्न करता है - For
for /f
कथन A से Z की सूची सेN
th आइटम चुनता है।- परिणाम लौटाओ
एक लूप के for
कुल 31
आइटम रख सकता है, और [इस विधि] का उपयोग करके व्यावहारिक रूप से असीमित आइटम। ( बैच - लूप पैरामीटर ऑर्डर के लिए
बैच में छद्म आयामी और वर्दी यादृच्छिक
छद्म आयामी वितरण
इस ढेर अतिप्रवाह जवाब के लिए , उपयोगकर्ता चेरीडॉट ने इस कोड को इंगित किया:
set /a num=%random% %% 100
एक समान वितरण नहीं देता है।
आंतरिक गतिशील चर %random%
करता है एक समान वितरण देता है, लेकिन इसके बाद के संस्करण कोड एक वर्दीधारी यादृच्छिक नहीं होगा। यह कोड 0 ~ 99 के बीच एक यादृच्छिक संख्या उत्पन्न करता है, लेकिन परिणाम एक समान नहीं होगा। 0 ~ 67 32767 MOD 100
= 67
बाद से 68 ~ 99 से अधिक होगा।
उपरोक्त कोड का उपयोग करके यादृच्छिक रूप से वितरित एक समान उत्पन्न करने के लिए, फिर 100
को बदलना होगा। यहां एक संख्या प्राप्त करने की एक विधि है जो एक समान वितरण बनाती है।
32767 mod (32767 / n)
जहाँ n
एक पूर्णांक है, 0 ~ 32767 के बीच, परिणाम दशमलव हो सकता है और बैच में काम नहीं कर सकता है।
वर्दी वितरण
set /a result=(%RANDOM%*100/32768)+1
यह विधि एक समान वितरण उत्पन्न करेगी। यह %
का उपयोग करने से बचता है, जो एक बैच स्क्रिप्ट में "शेष" और फिर "मापांक" की तरह है। %
का उपयोग किए बिना, परिणाम समान होगा।
वैकल्पिक रूप से, यहां एक अक्षम, लेकिन एक समान विधि है।
set /a test=%random%
if %test% geq [yourMinNumber] (
if %test% leq [yourMaxNumber] (
rem do something with your random number that is in the range.
)
)
अपने मूल्यों के अनुसार [yourMinNumber]
और [yourMaxNumber]
बदलें।