BATCH स्क्रिप्ट में यादृच्छिक का उपयोग कैसे करें?
BATCH स्क्रिप्ट में यादृच्छिक का उपयोग कैसे करें?
जवाबों:
%RANDOM%
आपको 0 और 32767 के बीच एक यादृच्छिक संख्या देता है।
जैसे एक अभिव्यक्ति का उपयोग करके SET /A test=%RANDOM% * 100 / 32768 + 1
, आप अपनी पसंद की किसी भी सीमा को बदल सकते हैं (यहाँ [1… 1007] के बजाय [1… 1007]] है।
SETLOCAL ENABLEDELAYEDEXPANSION
का उपयोग कर रहे हैं और !RANDOM!
इसके बजाय का उपयोग करना चाहिए %RANDOM%
।
%RANDOM% * (%maxval% - %minval% + 1) / 32768 + %minval%
; बस पहले उचित मूल्यों पर सेट minval
और maxval
।
% RANDOM% आपको 0 और 32767 के बीच एक यादृच्छिक संख्या देता है।
आप संख्या की सीमा को इसके साथ नियंत्रित कर सकते हैं:
set /a num=%random% %%100
- 0 ~ 99 के बीच संख्या का उत्पादन करेगा।
यह वाला:
set /a num=%random% %%100 +1
- 1 ~ 100 के बीच संख्या का उत्पादन करेगा।
%random% %%100
कोई जादू सिंटैक्स नहीं है, लेकिन वास्तव %random % %% 100
में एक कम जगह के साथ, जहां %%
सिर्फ एक बच गया है %
जो
आप शायद कई यादृच्छिक संख्याएँ प्राप्त करना चाहेंगे, और हर एक के लिए एक अलग श्रेणी निर्दिष्ट करने में सक्षम होना चाहते हैं, इसलिए आपको एक फ़ंक्शन को परिभाषित करना चाहिए। मेरे उदाहरण में, मैं 25 से 30 के माध्यम से संख्या उत्पन्न करता हूं call:rand 25 30
। और परिणाम RAND_NUM
उस फ़ंक्शन से बाहर निकलने के बाद है।
@echo off & setlocal EnableDelayedExpansion
for /L %%a in (1 1 10) do (
call:rand 25 30
echo !RAND_NUM!
)
goto:EOF
REM The script ends at the above goto:EOF. The following are functions.
REM rand()
REM Input: %1 is min, %2 is max.
REM Output: RAND_NUM is set to a random number from min through max.
:rand
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF
@echo off & setLocal EnableDelayedExpansion
for /L %%a in (1 1 100) do (
echo !random!
)
आप इसे इस तरह से कर सकते हैं, जिसकी आवश्यकता नहीं है EnableDelayedExpansion
:choosenamea
cls
set /a choosemname=%random%
if %choosemname% GTR %max% goto choosenameb
if %choosemname% LSS %min% goto choosenameb
goto gotnamenow
max
आपका अधिकतम कहां है और min
आपका न्यूनतम है। यदि आपकी सीमा बहुत छोटी है तो यह बहुत अधिक कुशल नहीं हो सकता है। साथ ही, यह 32767 से बड़े नंबरों के लिए काम नहीं करेगा।
मान लें कि आप 1-5 नंबर चाहते हैं; आप निम्नलिखित का उपयोग कर सकते हैं:
:LOOP
set NUM=%random:~-1,1%
if %NUM% GTR 5 (
goto LOOP )
goto NEXT
या आप का उपयोग कर सकते हैं: ~ 1,1 के स्थान पर: ~ -1,1। : ~ -1,1 की जरूरत नहीं है, लेकिन यह सही सीमा को हिट करने में लगने वाले समय को काफी कम कर देता है। मान लें कि आप नंबर 1-50 चाहते हैं, हमें 2 अंकों और 1 अंकों के बीच का निर्णय करना होगा। उपयोग:
:LOOP
set RAN1=%random:~-1,1%
if %RAN1% GTR 5 (
goto 1 )
if %RAN1%==5 (
goto LOOP )
goto 2
:1
set NUM=%random:~-1,1%
goto NEXT
:2
set NUM=%random:~-1,2%
goto NEXT
आप इस एल्गोरिथ्म में अधिक जोड़ सकते हैं ताकि बड़ी रेंज के बीच का निर्णय लिया जा सके, जैसे 1-1000।
goto
जब आप ऊपर जैसा एक लाइनर लगा सकते हैं तो आप क्यों इस्तेमाल करेंगे ? अन्य समाधान आपको स्पष्ट रूप से सीमा निर्दिष्ट करने देते हैं। आपके कोड का क्या फायदा है?
set /a number=%random% %% [maximum]-[minimum]
उदाहरण "
set /a number=%random% %% 100-50
100 और 50 के बीच एक यादृच्छिक संख्या देगा। यदि आप एक बैच स्क्रिप्ट में लाइन का उपयोग नहीं कर रहे हैं, तो केवल एक प्रतिशत संकेत का उपयोग ऑपरेंड के रूप में करें!
@echo off
title Professional Hacker
color 02
:matrix
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
goto matrix
@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)ELSE set C=1&set D=2&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
title %random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %D%&ECHO %random%%C%%random%%random%%random%%random%6%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%&(IF %C% EQU 46 (TIMEOUT /T 1 /NOBREAK>nul&set C=1&CLS&IF %D% EQU 9 (set D=1)ELSE set /A D=%D%+1)ELSE set /A C=%C%+1)&goto Y
कई IF स्टेटमेंट और (()) के बहुत से सरलीकृत
और सिर्फ उन लोगों के लिए पूरी तरह से यादृच्छिक होना चाहिए जो हमेशा एक काली स्क्रीन नहीं चाहते हैं।
@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)ELSE set A=0&set C=1&set V=A&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
(IF %A% EQU 10 set A=A)&(IF %A% EQU 11 set A=B)&(IF %A% EQU 12 set A=C)&(IF %A% EQU 13 set A=D)&(IF %A% EQU 14 set A=E)&(IF %A% EQU 15 set A=F)
(IF %V% EQU 10 set V=A)&(IF %V% EQU 11 set V=B)&(IF %V% EQU 12 set V=C)&(IF %V% EQU 13 set V=D)&(IF %V% EQU 14 set V=E)&(IF %V% EQU 15 set V=F)
(IF %A% EQU %V% set A=0)
title %A%%V%%random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %A%%V%&ECHO %random%%C%%random%%random%%random%%random%6%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%&(IF %C% EQU 46 (TIMEOUT /T 1 /NOBREAK>nul&set C=1&CLS&SET /A A=%random% %%15 +1&SET /A V=%random% %%15 +1)ELSE set /A C=%C%+1)&goto Y
यह स्क्रीन का रंग बदल देगा दोनों यादृच्छिक हैं।
यदि आप कुछ बड़े मूल्य से विभाजित करेंगे तो आपको एक के बाद एक भारी मात्रा में डुप्लिकेट मिलेंगे। आपको% RANDOM% मान के मोडुलो लेने के लिए क्या करना चाहिए:
@echo off
REM
SET maxvalue=10
SET minvalue=1
SETLOCAL
SET /A tmpRandom=((%RANDOM%)%%(%maxvalue%))+(%minvalue%)
echo "Tmp random: %tmpRandom%"
echo "Random: %RANDOM%"
ENDLOCAL
यहाँ एक उदाहरण है जो मैंने आपके लिए बनाया है, यह एक डायलॉग प्रदर्शित करना चाहिए जो आपको नंबर 1-10 का चयन करने के लिए कहे, आपके द्वारा चुने गए नंबर के आधार पर, यह आपके द्वारा नामित बैच फ़ाइल के लिए एक यादृच्छिक संख्या उदाहरण उत्पन्न करेगा। यदि आप "1" का चयन करते हैं तो आपको यादृच्छिक 1 अंक संख्या का उदाहरण मिलेगा। यदि आप "10" चुनते हैं, तो आपको एक यादृच्छिक 10 अंकों की संख्या का उदाहरण मिलेगा।
@echo off
color f0
set /p "FileName= Enter Filename (Without Extension) : "
echo @echo off >> %FileName%.bat
echo File Created!
pause
cls
:CommandLine
set /p "calc= ~%ComputerName%: Enter a number to recieve the amount of random digits :"
if %calc%==genrand_help goto GenerateRandomHelp
if %calc%==1 echo echo %%RANDOM:~-1%% >> %FileName%.bat
if %calc%==2 echo echo %%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==3 echo echo %%RANDOM:~-1%%%%RANDOM:~-1%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==4 echo echo %%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==5 echo echo %%Random%% >> %FileName%.bat
if %calc%==6 echo echo %%Random%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==7 echo echo %%Random%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==8 echo echo %%Random%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==9 echo echo %%Random%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==10 echo echo %%Random%%%%Random%% >> %FileName%.bat
goto CommandLine
अब डॉस इंद्रधनुष के सभी रंगों की विशेषता है
@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)
ELSE set C=1&set D=A&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
set V=%D%
(IF %V% EQU 10 set V=A)
& (IF %V% EQU 11 set V=B)
& (IF %V% EQU 12 set V=C)
& (IF %V% EQU 13 set V=D)
& (IF %V% EQU 14 set V=E)
& (IF %V% EQU 15 set V=F)
title %random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %V%&ECHO %random%%C%%random%%random%%random%%random%6%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%
&(IF %C% EQU 46 (TIMEOUT /T 1 /NOBREAK>nul&set C=1&CLS&IF %D% EQU 15 (set D=1)ELSE set /A D=%D%+1)
ELSE set /A C=%C%+1)&goto Y
और बस पूरी तरह से यादृच्छिक होने के लिए, ऑर्डर की कुल कमी: SET /A V=%random% %%15 +1
@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)ELSE set C=1&set V=A&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
(IF %V% EQU 10 set V=A)&(IF %V% EQU 11 set V=B)&(IF %V% EQU 12 set V=C)&(IF %V% EQU 13 set V=D)&(IF %V% EQU 14 set V=E)&(IF %V% EQU 15 set V=F)
title %V%%random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %V%&ECHO %random%%C%%random%%random%%random%%random%6%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%&(IF %C% EQU 46 (TIMEOUT /T 1 /NOBREAK>nul&set C=1&CLS&SET /A V=%random% %%15 +1)ELSE set /A C=%C%+1)&goto Y