Существует дискуссия здесь , что вы могли бы адаптировать для ваших целей.
@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 объясняет вышеизложенное:
Я изменил его, чтобы вы могли легко указывать длину и добавлять или удалять символы без необходимости изменения какой-либо другой части кода.
Например, вы можете не использовать и 0 и O (ноль и прописные буквы O), или 1 и l (один и строчные буквы L).
Вы можете использовать знаки препинания за исключением следующих символов:
! % ^ & < >
Вы можете использовать ^
и %
, но должны дважды ввести их в переменную _Alphanumeric
как ^^ или %%
. Однако, если вы хотите использовать результат (_RndAlphaNum
) позже в командном файле (кроме вывода на экран), они могут потребовать специальной обработки.
Вы даже можете использовать пробел, если это не последний символ в строке. Если он окажется последним символом в сгенерированной строке, он не будет использоваться, поэтому у вас будет только 7 символов.