如何制作一个可生成 5000 个随机字母的批处理文件?

如何制作一个可生成 5000 个随机字母的批处理文件?

我想批量制作一个随机字母/数字生成器。我希望它每次执行时生成 1000 次,但我该怎么做才能让它在新行上生成新的随机密码。

例如,如果我打开它 1 次,它会生成 1000 行,每行密码以 0 开头,然后是 9 个随机字母,那么就完成了吗?

https://ghostbin.co/paste/57uw8(代码链接)

答案1

根据您的链接,原始代码如下:

Setlocal EnableDelayedExpansion
Set _RNDLength=9
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567899876543210
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 0!_RndAlphaNum! >> your-new-password.txt

我首先会稍微清理一下以保持一致性和提高可读性,然后添加@ECHO OFF隐藏命令以使其运行干净:

@ECHO OFF
Setlocal EnableDelayedExpansion
SET _RNDLength=9
SET _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567899876543210
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 !_RndAlphaNum!>> your-new-password.txt

顺便说一句,将其放在@行的前面可以防止该行被回显。由于要关闭整个脚本的回显需要一个将被回显的命令,因此最好将其包含在该行中,这样它本身就不会被回显。希望这是有意义的。

现在开始解决方案。您还需要 2 个变量,一个用于设置密码的最大数量,另一个用于跟踪已创建的密码数量。第一个变量可以在_RNDLength设置时设置,第二个变量应与第一个变量一起设置。第二个变量应设置为,1因为在创建密码后,它将递增并进行检查。如果在检查时它不小于最大值(即等于),则脚本将退出。如果我们将其设置为0,由于这里的样式,我们将有 1001 个密码而不是 1000 个密码。

SET _PwdMax=1000
SET _PwdCount=1

然后在最后的 echo 命令之后,您应该添加一个命令来增加第二个变量和一个 IF 语句,用于检查创建的密码数量是否小于所需的最大密码数量。

SET /a _PwdCount+=1
IF !_PwdCount! LSS %_PwdMax% goto _LenLoop

总的来说,你的代码看起来应该是这样的:

@ECHO OFF
Setlocal EnableDelayedExpansion
SET _RNDLength=9
SET _PwdMax=1000
SET _PwdCount=1
SET _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567899876543210
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 !_RndAlphaNum! >> your-new-password.txt
SET /a _PwdCount+=1
IF !_PwdCount! LSS %_PwdMax% goto _LenLoop

答案2

我提出一个更简单的替代方案

@echo off  
setlocal enabledelayedexpansion  
set "string=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"  
set prefix=0  
set lines=1000  
set chars=9  
set outfile=passwords.txt  
if exist "%outfile%" del "%outfile%"  
for /l %%A in (1,1,%lines%) do (  
    set "result="  
    for /L %%i in (1,1,%chars%) do call :addchar  
    echo %prefix%!result!  
    echo %prefix%!result! >> %outfile%  
    )  
goto end  

:addchar  
set /a x=%random% %% 52  
set result=%result%!string:~%x%,1!  
goto :eof  

:end  
echo Script finished  
pause  

相关内容