Há uma discussão aqui que você pode adaptar para seus propósitos.
@Echo Off
Setlocal EnableDelayedExpansion
Set _RNDLength=8
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Set _Str=%_Alphanumeric%987654321
:_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 Random string is !_RndAlphaNum!
TheOutcaste explica o acima:
Eu o modifiquei para que você possa especificar facilmente o tamanho e adicionar ou remover caracteres sem precisar alterar nenhuma outra parte do código.
Por exemplo, você pode não querer usar 0 e O (zero e O maiúsculo) ou 1 e l (um e L minúsculo).
Você pode usar pontuação, exceto para esses caracteres:
! % ^ & < >
Você pode usar ^
e %
, mas deve inseri-los na _Alphanumeric
variável duas vezes como ^^ ou %%
. No entanto, se você desejar usar o resultado ( _RndAlphaNum
) posteriormente no arquivo em lotes (que não seja Eco na tela), eles podem exigir tratamento especial.
Você pode até usar um espaço, desde que não seja o último caractere da string. No entanto, se ele terminar como o último caractere na string gerada, ele não será usado; portanto, você terá apenas 7 caracteres.