Generador Claves Aleatorias Batch

Iniciado por k05774, 31 Octubre 2016, 13:56 PM

0 Miembros y 1 Visitante están viendo este tema.

k05774

Intento hacer que el archivo me muestre varios codigos aleatorios a la vez, pero solo me muestra uno.

Ademas solo funciona la primera vez, a partir de la segunda ya muestra menos caracteres de los que se indican hasta que salta esto: Se ha alcanzado el maximo de recursividad de setlocal.

¿Como arreglarlo?

@Echo Off
:menu
cls
echo Generador de Claves
echo.
echo 1. Generar Clave.
echo 2. Salir.
set /p var=
if %var%==1 goto :pregunta
if %var%==2 goto exit
if %var% gtr 2 echo error
goto :menu

:pregunta
cls
set /p lengthnumberuser="Cantidad de caracteres? "
if %lengthnumberuser% gtr 0 goto :clave
if %lengthnumberuser% == 0 echo error
goto :pregunta

:clave
cls
Setlocal EnableDelayedExpansion
Set _RNDLength=%lengthnumberuser%
Set _Alphanumeric=0123456789ABCDEFabcdef
Set _Str=%_Alphanumeric%9876543210
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& goto :_LenLoop
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto :_loop
echo Clave Aleatoria: !_RndAlphaNum!
echo.
echo 1. Generar Clave
echo 2. Volver
set /p var=
if %var%==1 goto :pregunta
if %var%==2 goto :menu
if %var% gtr 2 echo error
endlocal
goto :clave

RainSix

#1
Buenas justo andaba mirando generadores por el foro, y me ha surgido la necesidad de registrarme para responderte, lo cierto es que ya tardaba porque me he mirado muchas veces este foro y me encanta.

Creo que el problema despues de haberlo probado yo personalmente es que el endlocal esta mal puesto, por eso te daba el error de maximo de recursividad del setlocal. Te adjunto el codigo que a mi me ha funcionado:

@Echo Off
:menu
cls
echo Generador de Claves
echo.
echo 1. Generar Clave.
echo 2. Salir.
set /p var=
if %var%==1 goto :pregunta
if %var%==2 goto exit
if %var% gtr 2 echo error
goto :menu

:pregunta
cls
set /p lengthnumberuser="Cantidad de caracteres? "
if %lengthnumberuser% gtr 0 goto :clave
if %lengthnumberuser% == 0 echo error
goto :pregunta

:clave
cls
Setlocal EnableDelayedExpansion
Set _RNDLength=%lengthnumberuser%
Set _Alphanumeric=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Set _Str=%_Alphanumeric%9876543210
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& goto :_LenLoop
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto :_loop
echo Clave Aleatoria: !_RndAlphaNum!
endlocal
echo.
echo 1. Generar Clave
echo 2. Volver
set /p var=
if %var%==1 goto :pregunta
if %var%==2 goto :menu
if %var% gtr 2 echo error
-.RainSix.-

Eleкtro

#2
Pues ya que estamos, y aunque doy mal ejemplo al continuar comentando en un thread del 2016, comparto nostalgicamente este proyecto que hice en Batch-script y que les podría servir:


Saludos.








RainSix

#3
Cita de: Eleкtro en 19 Marzo 2019, 00:07 AM
Pues ya que estamos, y aunque doy mal ejemplo al continuar comentando en un thread del 2016, comparto nostalgicamente este proyecto que hice en Batch-script y que les podría servir:


Saludos.

Me acabo de mirar todo el post y me quedo sin palabras... Me he pasado una tarde mirando el código y entenderlo paso a paso, hasta le he implementado algún que otra posibilidad de serial como de 5x3 o 6x3, y pese que se me ha pasado algún que otro error al final he logrado que funcione. Una maravilla de código, mis 10, agradezco que lo hayas compartido.

Saludos.
-.RainSix.-