我很难弄清楚如何制作一个包含随机字母的密码生成器。例如,ASWED-ASDWAD-EFEST。到目前为止,我只能使用代码生成随机数
@echo off
:password
echo %random%-%random%-%random
pause
goto password
PS:我的操作系统是Windows Vista。
任何帮助都将受到感谢。
答案1
有讨论这里你可以根据自己的目的进行调整。
@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!
贱民解释上述内容:
我已经对其进行了修改,以便您可以轻松指定长度并添加或删除字符,而无需更改代码的任何其他部分。
例如,您可能不想同时使用 0 和 O(零和大写 O),或者 1 和 l(一和小写 L)。
您可以使用除以下字符之外的标点符号:
! % ^ & < >
您可以使用
^
和%
,但必须将它们_Alphanumeric
作为 ^^ 或 两次输入到变量中%%
。但是,如果您想_RndAlphaNum
稍后在批处理文件中使用结果 ( )(而不是回显到屏幕上),则可能需要对它们进行特殊处理。您甚至可以使用空格,只要它不是字符串中的最后一个字符即可。但如果它是生成的字符串中的最后一个字符,则不会使用它,因此您只有 7 个字符。
答案2
rem 16 stings pwd
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
set pwd=
FOR /L %%b IN (0, 1, 16) DO (
SET /A rnd_num=!RANDOM! * 62 / 32768 + 1
for /F %%c in ('echo %%alfanum:~!rnd_num!^,1%%') do set pwd=!pwd!%%c
)
echo pwd=%pwd%
答案3
这是一个简单而优雅的解决方案
@echo off
setlocal enableextensions enabledelayedexpansion
set /P _length=Password Length: %==%
set /a z = %_length%
set "string=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
set "password="
for /L %%i in (1,1,!z!) do call :_genRand
echo Password is: %password%
goto :EOF
:_genRand
set /a x=%random% %% 62
set password=%password%!string:~%x%,1!
goto :eof
答案4
我编辑了保罗的一篇文章:
@Echo Off
color 0a
set /P lengthnumberuser="What length do you want your password to be? "
pause
cls
Setlocal EnableDelayedExpansion
Set _RNDLength=%lengthnumberuser%
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 Password is: is !_RndAlphaNum!
pause