Batch file 此代码不运行,但仅存在。我不确定我在哪里犯了错误
我希望你能帮助我。所以,我一直在尝试运行这个命令。但每次我这么做的时候,它就退出了。然后,我发现了这个错误.“批处理文件做(在这个时候是意外的)”我不知道我在哪里犯了错误。提前感谢所有的答复 这是我的密码:Batch file 此代码不运行,但仅存在。我不确定我在哪里犯了错误,batch-file,Batch File,我希望你能帮助我。所以,我一直在尝试运行这个命令。但每次我这么做的时候,它就退出了。然后,我发现了这个错误.“批处理文件做(在这个时候是意外的)”我不知道我在哪里犯了错误。提前感谢所有的答复 这是我的密码: @echo off for /L %%n in (1,1,3) do ( set uname=mama set pword=mu :xy set /p user ="Enter Username" set /p pass="Enter Pass"
@echo off
for /L %%n in (1,1,3) do (
set uname=mama
set pword=mu
:xy
set /p user ="Enter Username"
set /p pass="Enter Pass"
if %uname%==%user% ( echo
username is valid ) ELSE (
echo username not found
goto xy
)
IF %pword%==%pass% ( echo sucess
) ELSE (
echo invalid password
goto xy
)
pause
if %%n EQU 3 (echo Run Again)
)
这在评论中详细阐述: 用
计数器替换的循环,以限制的尝试
@echo off&&setlocal enabledelayedexpansion
设置“uname=mama”和设置“pword=mu”
:xy
设置/a“\u cnt+=1+0”&设置/p“用户=输入用户名:”
如果没有!\u cnt!eq 3(
如果“!uname!”==“!user!”(echo/Username有效^!!
)else(未找到echo/Username^!!&goto:xy)
设置/p“通过=输入通过:”
如果“!pword!”==”!pass!”(echo/success^!!
)else(回显/无效密码^!!&goto:xy)
)else(再次回显/运行^!!&&%\uuuuuuuuuuuuuuuuuuuuu%timeout-1&endlocal&goto:EOF)
rem/在使用endlocal…&&endlocal&goto:EOFF后,在此处执行更多任务
查看您的代码在我看来,使用Call
可以解决嵌套标签和延迟扩展问题,并可能使您的代码更易于管理
@Echo关闭
设置“uname=mama”
设置“pword=mu”
设置“用户=”
设置“通过=”
:输入
对于/L%%G In(1,1,3)Do(
电话:xy
如果不是错误1级转到主
)
“%\uuuu AppDir\uuuuu%choice.exe”/M”是否重试
如果不是错误级别2转到输入
退出/B 1
:Main
在下面为成功输入的用户重新输入代码。
回显欢迎%user%。
超时/T 3/NoBreak>NUL
Rem您的代码在这里结束。
退出/b0
:xy
ClS
设置/P“用户=输入用户名>%user%”
如果/I不是“%uname%”,则为“%user%”(
未找到回显用户名。
设置“用户=”
超时/T 2/NoBreak>NUL
退出/B 1
)
Echo用户名是有效的。
设置/P“通过=输入通过>”
如果“%pword%”==“%pass%”退出/B 0
回显无效密码。
设置“通过=”
超时/T 2/NoBreak>NUL
退出/B 1
您可能会注意到,我使用了推荐的语法来使用Set
命令定义变量。它确保内容受到保护,并且没有隐藏的尾随空格。如果您查看问题中的代码,您会注意到分配给uname
变量的值实际上是mama
。当mama
被锁定在脚本的其余部分之外时,这显然会导致问题
您还注意到,在echo
和username is valid
之间有一个不需要的换行符,而不是空格
编辑
对上述代码进行了重新处理,以允许最多三次尝试正确输入这两个值,尽管重试
消息似乎有点多余。您的代码中有一些错误
代码块中不允许使用标签,可能会破坏它们//标签已删除
goto
无条件地中断代码块//左一个goto
以故意离开循环并删除其余部分
您需要使用在同一代码块中更改的变量(技术上不需要uname
和pword
,正如我在循环外部定义的那样)//启用并使用延迟扩展
您在set uname=mama
//中有一个空格,由推荐的语法set“var=value”
(安全问题)出于安全原因,您不应该判断是用户名还是密码(或两者都是),这是错误的//修复了(作为奖励,它简化了代码)
修复了上述错误并降低了代码复杂度后,它可能看起来像:
@echo off
setlocal enabledelayedexpansion
set "uname=mama"
set "pword=mu"
for /L %%n in (1,1,3) do (
set /p "user=Enter Username: "
set /p "pass=Enter Password: "
if "!uname!-!pword!" == "!user!-!pass!" goto :payload
echo Invalid username or password.
pause
)
echo sorry, run again.
goto :eof
:payload
echo successfully logged in.
REM rest of your code
(说到安全性:在(可读的)代码中使用明文形式的凭证,任何标准都不安全,但使用纯批处理很难克服)在代码块中不允许有标签和没有代码> Goto 。逻辑上:与此相结合,强制用户在执行有效负载之前输入有效凭证三次。“老实说,”Stephan,我甚至没有考虑到意图只允许终端用户三次获得两个EN。请尝试更正。我为我的误解道歉,并已重新编写代码以说明原因。