खोज…


रैंडम नंबर

गतिशील चर %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] बदलें।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow