최근 일괄 적으로 비밀번호 스크립트를 작성했습니다. 기본적으로 다른 배치 스크립트에서 암호를 가져 와서 얼마나 많은 문자가 있는지 알아 내고 사용자로부터 암호를 받아 비교합니다. 그러나, 나와 함께 단순한 것은 없으며 몇 가지 중첩 된 FOR 루프 등을 들었습니다. 그러나 당신이 입력 한 암호로 password
를 설정하지 않습니다,일괄 처리 스크립트가 작동하지 않습니다.
@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
지금, 스크립트가 충돌하거나 그런 아무것도하지 않습니다 : 그것은 설명하기 어려운, 그래서 여기에 코드입니다.
실행하면 이해할 수 있습니다.
참고 : pass.bat 순전히 당신은 시도 할 수 set pass=default
솔루션을 제공해 주셔서 감사합니다. 그러나 처음으로 int를 사용할 필요가 없기 때문에 중첩 된 for 루프도 제거해야했습니다. –