Существует дискуссия здесь, что вы могли бы адаптировать для ваших целей.
@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 символов.