我最近批量编写了一个密码脚本。基本上,它从不同的批处理脚本中获取密码,找出它有多少个字符,从用户那里获取密码并进行比较。然而,对我来说没有什么是简单的,我已经进入了一些嵌套的 FOR 循环等。很难解释,所以代码如下:
@echo off
setlocal enabledelayedexpansion
call pass.bat & rem Sets the variable "pass" as "default".
set map=abcdefghijklmnopqrstuvwxyz
set len=0
for /l %%A in (12,-1,0) do (
set /a "len|=1<<%%A"
for %%B in (!len!) do if "!pass:~%%B,1!"=="" set /a "len&=~1<<%%A"
)
for /l %%C in (1,1,100) do (
set letter%%C=!pass:~%%C,1!
)
:pass
for /l %%D in (0,1,%len%) do (
cls
choice /c "abcdefghijklmnopqrstuvwxyz" /n /m "Password: !ast!"
set /a charerr=!errorlevel!-1
for /l %%E in (0,1,25) do (
set password=!password!%map:~!charerr!,1% & rem This is the problem line.
)
set ast=!ast!*
)
if "%pass%" neq "%password%" goto fail
cls
echo Correct Password
echo pass: %pass%
echo password: %password%
>nul pause
exit
:fail
set /a tries-=1
if %tries% geq 1 goto pass
现在,脚本不会崩溃或类似情况,但它不会设置password
为您输入的密码。
如果你运行它,你就会明白。
注意: pass.bat 纯粹包含该行set pass=default