কীভাবে ব্যাচ স্ক্রিপ্টে এলোমেলোভাবে ব্যবহার করবেন?


103

কীভাবে ব্যাচ স্ক্রিপ্টে এলোমেলোভাবে ব্যবহার করবেন?


1
আপনি কেন ব্যাচে বিশেষভাবে এটি করতে চান?
মাদুর

ব্যাচের স্ক্রিপ্টগুলিতে র্যান্ডম সংখ্যার সাথে সম্পর্কিত সুপার
ইউজারের

উত্তর:


121

%RANDOM% আপনাকে 0 এবং 32767 এর মধ্যে একটি এলোমেলো নম্বর দেয়।

এর মত একটি এক্সপ্রেশন ব্যবহার করে SET /A test=%RANDOM% * 100 / 32768 + 1আপনি নিজের পছন্দমতো যে কোনও কিছুতে ব্যাপ্তি পরিবর্তন করতে পারেন (এখানে পরিসীমা [1… 100] [0… 32767] এর পরিবর্তে)।


9
নির্দিষ্ট সমস্যাটি দেওয়া, আপনি সম্ভবত কোনও ধরণের লুপ ব্যবহার করবেন? তাহলে আপনি অবশ্যই ইউজিন পোস্টের মতো বিলম্বিত সম্প্রসারণ যেমন: এর মাধ্যমে SETLOCAL ENABLEDELAYEDEXPANSIONএবং এর !RANDOM!পরিবর্তে ব্যবহার %RANDOM%করা উচিত।
মউসিও

14
আরও সাধারণ অভিব্যক্তি হবে %RANDOM% * (%maxval% - %minval% + 1) / 32768 + %minval%; শুধু সেট minvalএবং maxvalউপযুক্ত মান প্রথমে।
মউসিও

1
আরও দেখুন একক এর উত্তর
mousio

55

% র্যান্ডোম% আপনাকে 0 এবং 32767 এর মধ্যে একটি এলোমেলো সংখ্যা দেয়।

আপনি এর সাথে সংখ্যার ব্যাপ্তি নিয়ন্ত্রণ করতে পারেন:

set /a num=%random% %%100

- 0 ~ 99 এর মধ্যে সংখ্যা তৈরি করবে।

এইটা:

set /a num=%random% %%100 +1

- 1 ~ 100 এর মধ্যে সংখ্যা তৈরি করবে।


8
নোট করুন যে এটি অভিন্নভাবে বিতরণ করা হবে না! 0 ~ 99 উদাহরণটি গ্রহণ করে 0 ~ 67 সংখ্যাটি 68 ~ 99 সংখ্যার তুলনায় কিছুটা বেশি ঘন ঘন ঘটে কারণ 32767 মডুলো 100 67 হয় এবং 0 হয় না কারণ এটি অভিন্ন বিতরণের জন্য হতে পারে। (এটি %random% %%100কোনও ম্যাজিক বাক্যবিন্যাস নয় তবে আসলে %random % %% 100একটি কম স্থানের সাথে, যেখানে %%কেবলমাত্র একটি পালিয়ে যাওয়া %যা
মডুলোর

উইন্ডোজ ১০-এ এটি চেষ্টা করার সময় আমি "মিসিং অপারেন্ড" ত্রুটি পেয়েছি। মনে হচ্ছে মডুলোর জন্য আপনার কেবল একটি গতি% প্রয়োজন।
কলমারিয়াস

19

আপনি সম্ভবত বেশ কয়েকটি এলোমেলো নম্বর পেতে চাইবেন এবং প্রত্যেকের জন্য একটি আলাদা পরিসর নির্দিষ্ট করতে সক্ষম হতে পারেন, সুতরাং আপনার কোনও ফাংশন সংজ্ঞায়িত করা উচিত। আমার উদাহরণে, আমি 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

থেক্স, ভাল কাজ করুন: যদি / এল %% এ (1 1% 3 ') এর জন্য কল করুন: র্যান্ড% 1% 2
এটি আমার ছিল না


4

আপনি এটি এইভাবে করতে পারেন, যার প্রয়োজন নেই EnableDelayedExpansion

:choosenamea
cls
set /a choosemname=%random%

if %choosemname% GTR %max% goto choosenameb
if %choosemname% LSS %min% goto choosenameb
goto gotnamenow

কোথায় maxআপনার সর্বোচ্চ এবং minআপনার সর্বনিম্ন। এটি খুব কার্যকর নয় যেহেতু আপনার পরিসর খুব কম হলে প্রচুর রাউন্ড নিতে পারে। এছাড়াও, এটি 32767 এর চেয়ে বেশি সংখ্যার জন্য কাজ করবে না।


3

ধরা যাক আপনি 1-5 নম্বর চান; আপনি নিম্নলিখিত ব্যবহার করতে পারে:

    :LOOP
    set NUM=%random:~-1,1%
    if %NUM% GTR 5 (
    goto LOOP )
    goto NEXT

অথবা আপনি ব্যবহার করতে পারেন: in 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 এর মতো বড় রেঞ্জগুলির মধ্যে সিদ্ধান্ত নিতে এই অ্যালগরিদমে আরও যুক্ত করতে পারেন।


3
আপনি gotoযখন উপরে একটি লাইনার রাখতে পারেন তবে কেন আপনি ব্যবহার করবেন ? অন্যান্য সমাধান আপনাকে স্পষ্টভাবে পরিসীমা নির্দিষ্ট করতে দেয়। আপনার কোড এর সুবিধা কি?
ম্যাক্স লেসেক

2
set /a number=%random% %% [maximum]-[minimum]

উদাহরণ "

set /a number=%random% %% 100-50

100 এবং 50 এর মধ্যে একটি এলোমেলো সংখ্যা দেবে you আপনি যদি ব্যাচের স্ক্রিপ্টে লাইনটি ব্যবহার না করেন তবে কেবল অপারেন্ড হিসাবে এক শতাংশ চিহ্ন ব্যবহার করবেন তা নিশ্চিত হন!


উইন্ডোজ 10 এ এটি -50 থেকে 49 পর্যন্ত সংখ্যা দেয়, যেমনটি হওয়া উচিত। এটা কি আসলেই অন্যথায় করেছে?
কিলভোজ 76

2
@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

1
এটিকে কিছু স্পেস দিন যাতে এটির লাইন থাকে, যেমন
@ কেও

1
@(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

একাধিক আইএফ স্টেটমেন্ট এবং প্রচুর পরিমাণে ((())) দিয়ে সরলীকৃত


1

এবং যারা সবসময় একটি কালো পর্দা চান না তাদের জন্য পুরোপুরি এলোমেলো হয়ে উঠুন।

@(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

এটি উভয় এলোমেলোভাবে পর্দার রঙ পরিবর্তন করবে।


1

আপনি যদি কিছু বড় মানের দ্বারা ভাগ করে নেন তবে আপনি একের পর এক বিশাল অঙ্কের নকল পাবেন। আপনাকে যা করতে হবে তা হল% 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

0

এখানে আমি আপনার জন্য একটি উদাহরণ তৈরি করেছি, এটি একটি ডায়ালগ প্রদর্শন করবে যা আপনাকে 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

-1

এখন ডস রংধনু এর সমস্ত রং বৈশিষ্ট্যযুক্ত

@(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

আমি মনে করি এটি ভেঙে গেছে
একটি সন্তানের

-1

এবং কেবল সম্পূর্ণরূপে এলোমেলোভাবে অর্ডারের মোট অভাব: 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.