我试图将变量插入变量,我尝试过,但它没有起作用:
set gabriel-ctCODE=fmfg1
set /p user=Username:
set /p password=Password:
set /p ctCODE=ctCODE:
if %password%== %%user%-pass% set /a loginerrorlevel=%loginerrorlevel%+1
pause
if %ctCODE%== "%%user%-ctCODE%" set /a loginerrorlevel=%loginerrorlevel%+1
if not %loginerrorlevel%== 2 goto login.incorrect
goto :aftercommand
我想将"用户"变量插入此变量:%%user%-pass%
你能帮我吗?
这是您重写用于验证输入的凭据数据的批次代码:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "gabriel-ctCODE=fmfg1"
set "gabriel-pass=xxxyyy"
set "UserName="
set /P "UserName=User name: "
set "Password="
set /P "Password=Password: "
set "ctCODE="
set /P "ctCODE=ctCODE: "
call set "UserPass=%%%UserName%-pass%%"
call set "UserCode=%%%UserName%-ctCODE%%"
set "LoginErrorLevel=0"
if "!Password!" == "!UserPass!" set /A LoginErrorLevel+=1
if "!ctCODE!" == "!UserCode!" set /A LoginErrorLevel+=1
if not %LoginErrorLevel% == 2 goto LoginIncorrect
echo Entered credential data are valid for login.
goto EndBatch
:LoginIncorrect
echo Enter credential data not valid for login.
:EndBatch
endlocal
在set /P
上,批处理文件的用户可以自由输入任何输入,在这种情况下,环境变量会保留其当前值,或者如果以前未定义,则仍未定义。上面的批处理代码确保在提示用户之前未定义3个环境变量。
批处理文件用户还可以自由输入任何内容,包括批处理文件执行的关键字符,例如 %
, >
<
, "
等字符作为字面字符,并在字符串比较上使用延迟扩展。
在使用命令行上使用" set var = text"之后,请阅读为什么没有" echo%var%"的字符串输出?并且在密码系统上不起作用以获取更多详细信息。
以获取环境变量的值gabriel-ctCODE
和gabriel-pass
,当用户输入gabriel
(无论如何)以用户名输入CC_10时,必须将命令 set 与适当的字符串一起使用,并另外命令呼叫在变量字符串中扩展环境变量。例如,在通过环境变量上读取subshell cmd的答案以获取详细信息。
算术表达式是set /A
之后的所有内容,Windows命令行解释器与平常完全不同。
有关命令行为的详细信息 setLocal 和 endlocal 阅读此答案。
为了基本了解使用的命令及其工作方式,打开命令提示符窗口,执行以下命令,并完全仔细阅读所有命令显示的帮助页面。
-
call /?
-
echo /?
-
endlocal /?
-
goto /?
-
if /?
-
set /?
-
setlocal /?