【问题标题】:Batch script not working批处理脚本不起作用
【发布时间】:2013-08-31 06:29:47
【问题描述】:

我最近批量编写了一个密码脚本。基本上,它从不同的批处理脚本中获取密码,找出它有多少个字符,从用户那里获取密码并进行比较。然而,对我来说,没有什么是简单的,我已经进入了一些嵌套的 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这一行

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    你可以试试

    call set "password=!password!%%map:~!charerr!,1%%"
    

    您的变体无法工作,因为当一个块被解析时,百分比扩展会被扩展,所以%map:~!charerr!,1% 将被扩展,但会失败为 !charerr!当时没有展开。

    CALL 可以在评估行时开始第二次解析时间,然后双百分比将正确扩展。

    【讨论】:

    • 感谢您的解决方案,但是我还需要取出嵌套的 for 循环,因为这不是必要的。
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多