wake-up-neo.com

Wie verwende ich zufällig das BATCH-Skript?

Wie verwende ich zufällig das BATCH-Skript?

92
IAdapter

%RANDOM% gibt Ihnen eine Zufallszahl zwischen 0 und 32767.

Mit einem Ausdruck wie SET /A test=%RANDOM% * 100 / 32768 + 1 können Sie den Bereich beliebig ändern (hier ist der Bereich [1… 100] anstelle von [0… 32767]).

105
mousio

% RANDOM% gibt Ihnen eine Zufallszahl zwischen 0 und 32767.

Sie können den Bereich der Nummer steuern mit:

set /a num=%random% %%100

- produziert eine Zahl zwischen 0 und 99.

Dieses:

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

- produziert eine Zahl zwischen 1 und 100.

47
GaryNg

Möglicherweise möchten Sie mehrere Zufallszahlen erhalten, und Sie möchten möglicherweise für jede einzelne einen anderen Bereich angeben. Daher sollten Sie eine Funktion definieren. In meinem Beispiel generiere ich mit call:Rand 25 30 Zahlen von 25 bis 30. Und das Ergebnis ist in Rand_NUM, nachdem diese Funktion beendet wurde.

@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
15
indiv
@echo off & setLocal EnableDelayedExpansion

for /L %%a in (1 1 100) do (
echo !random!
)
4
Evgeny Gavrin
set /a number=%random% %% [maximum]-[minimum]

beispiel " 

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

gibt eine Zufallszahl zwischen 100 und 50 aus. Verwenden Sie nur ein Prozentzeichen als Operanden, wenn Sie die Zeile in einem Batch-Skript nicht verwenden!

3
Jacob

Sie könnten es auf diese Weise tun, was EnableDelayedExpansion nicht erfordert

:choosenamea
cls
set /a choosemname=%random%

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

wobei max Ihr Maximum ist und min Ihr Minimum ist. Dies ist nicht sehr effizient, da bei einer zu geringen Reichweite möglicherweise viele Runden erforderlich sind. Dies funktioniert auch nicht für Zahlen größer als 32767.

3
calebhk98
@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
2
Sinji58

Angenommen, Sie möchten eine Zahl von 1 bis 5; Sie könnten Folgendes verwenden:

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

Oder verwenden Sie: ~ 1,1 anstelle von: ~ -1,1. Die: ~ -1,1 wird nicht benötigt, reduziert jedoch die Zeit, die erforderlich ist, um den richtigen Bereich zu erreichen. Angenommen, Sie möchten eine Zahl von 1 bis 50, müssen wir zwischen 2 Ziffern und 1 Ziffern entscheiden. Benutzen:

    :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

Sie können diesem Algorithmus mehr hinzufügen, um zwischen großen Bereichen wie 1-1000 zu wählen.

2
user3542843

Wenn Sie durch einen großen Wert dividieren, erhalten Sie nacheinander eine große Anzahl von Duplikaten. Was Sie tun müssen, ist ein Modulo des% RANDOM% -Wertes:

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

vereinfacht mit mehreren IF-Anweisungen und vielen ((()))

1
simple

Und ganz zufällig für diejenigen, die nicht immer einen schwarzen Bildschirm wollen.

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

Dies ändert die Bildschirmfarbe und beide sind zufällig.

1
strance

hier ist ein Beispiel, das ich für Sie erstellt habe. Es sollte ein Dialogfeld angezeigt werden, in dem Sie aufgefordert werden, eine Zahl von 1 bis 10 auszuwählen. Je nach der ausgewählten Nummer wird ein Beispiel für eine Zufallszahl für die von Ihnen genannte Batch-Datei generiert. Wenn Sie "1" wählen, erhalten Sie ein zufälliges 1-stelliges Beispiel. Wenn Sie "10" wählen, erhalten Sie ein Beispiel mit 10 Ziffern.

@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
0
zask