Cómo utilizar al azar en la secuencia de comandos por LOTES?

  • ¿por qué quieres hacer esto específicamente en el lote?
  • Es muy interesante la post en Superusuario relacionado con números aleatorios en archivos de proceso por lotes que vale la pena que se hace referencia aquí…
InformationsquelleAutor IAdapter | 2011-04-25

14 Comentarios

  1. 110

    %RANDOM% le da un número aleatorio entre 0 y 32767.

    El uso de una expresión como SET /A test=%RANDOM% * 100 /32768 + 1, puede cambiar el rango a cualquier cosa que te gusta (en este caso el rango es [1…100] en lugar de [0…32767]).

    • Dado el problema específico, es muy probable que usen algún tipo de bucle? A continuación, usted debe de hecho ser el uso de expansión retardada por ejemplo, a través de SETLOCAL ENABLEDELAYEDEXPANSION y el uso de !RANDOM! en lugar de %RANDOM%, como Eugene publicado.
    • Una expresión más general sería %RANDOM% * (%maxval% - %minval% + 1) / 32768 + %minval%; acaba de establecer minval y maxval a los valores apropiados en primer lugar.
    • Véase también indiv la respuesta de
  2. 50

    %RANDOM% le da un número aleatorio entre 0 y 32767.

    Puede controlar el número de la gama con:

    set /a num=%random% %%100
    

    – producirá número entre 0~99.

    Este:

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

    – producirá número entre 1~100.

    • Tenga en cuenta que esto no va a ser distribuidos de manera uniforme! Tomando el 0~99 ejemplo, los números de 0~67 se producen con una frecuencia ligeramente mayor que el número 68~99 debido a 32767 modulo 100 es de 67 años y no 0 como tendría que ser para una distribución uniforme. (Este %random% %%100 hay magia sintaxis, pero en realidad %random % %% 100 con un menor espacio, donde la %% es sólo un escapó % que representa modulo.)
  3. 16

    Usted probablemente querrá conseguir varios números al azar, y quiero ser capaz de especificar un rango diferente para cada uno, por lo que debe definir una función. En mi ejemplo, he generar números de 25 a 30 con call:rand 25 30. Y el resultado está en RAND_NUM después de que la función de las salidas.

    @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
    
    • thx, trabajo agradable: si for /L %%a in (1 1 %3 ‘) hacer la llamada:rand %1 %2
  4. 3
    set /a number=%random% %% [maximum]-[minimum]
    

    ejemplo »

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

    le dará un número aleatorio entre 100 y 50. Asegúrese de usar solamente un signo de porcentaje como operando si usted no está utilizando la línea en un archivo de comandos por lotes!

  5. 3

    Podría hacerlo de esta manera, que no requiere EnableDelayedExpansion

    :choosenamea
    cls
    set /a choosemname=%random%
    
    if %choosemname% GTR %max% goto choosenameb
    if %choosemname% LSS %min% goto choosenameb
    goto gotnamenow
    

    donde max es su máximo y min es mínima. Esto no es muy eficiente ya que puede tomar un montón de rondas si su rango es demasiado pequeño. También, esto no funcionará para números de más de 32767.

  6. 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
    
    • dar algo de esta espacios por lo que tiene de líneas, como @echo off
  7. 2

    Digamos que usted quiere un número de 1-5; se puede utilizar la siguiente:

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

    O usted podría utilizar :~1,1 en lugar de :~-1,1. El :~-1,1 no es necesario, pero se reduce en gran medida la cantidad de tiempo que se necesita para golpear el rango correcto. Digamos que usted quiere un número de 1 a 50, tenemos que decidir entre 2 dígitos y 1 dígito. Uso:

        :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
    

    Puede agregar más a este algoritmo para decidir entre las grandes rangos, tales como 1-1000.

    • ¿Por qué usar la goto cuando usted puede tener los trazadores de líneas uno como el de arriba? Otras soluciones permiten especificar explícitamente el rango. ¿Cuál es la ventaja de su código?
  8. 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

    simplificado con varias sentencias IF y un montón de ((()))

  9. 1

    Y sólo para estar completamente al azar para aquellos que no siempre quieres una pantalla en negro.

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

    Esto va a cambiar de color de la pantalla también son aleatorios.

  10. 1

    Si se divide por algunos de gran valor que se obtiene una gran cantidad de duplicados, uno tras otro.
    Lo que usted necesita hacer es tomar el modulo de la %RANDOM% valor:

    @echo off
    REM 
    SET maxvalue=10
    SET minvalue=1
    SETLOCAL 
    SET /A tmpRandom=((%RANDOM%)%%(%maxvalue%))+(%minvalue%)
    echo "Tmp random: %tmpRandom%"
    echo "Random:  %RANDOM%"
    ENDLOCAL
    
  11. 0

    aquí es un ejemplo que he creado para usted, debe mostrar un cuadro de diálogo que le pedirá que seleccione un número de 1 a 10, dependiendo del número que usted seleccione, se generará un número aleatorio ejemplo a un archivo por lotes que denomina. Si selecciona «1», significa que usted conseguirá un azar de 1 dígito ejemplo de número. si selecciona «10», a continuación, usted recibirá un aleatoria número de 10 dígitos ejemplo.

    @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
    
  12. -1

    ahora con todos los colores de los dos arco iris

    @(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
    
    • prog funciona bien w/o edición
    • Creo que está roto
  13. -1

    Y sólo para estar completamente al azar, una ausencia total de orden: 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

Dejar respuesta

Please enter your comment!
Please enter your name here