将变量插入批处理中



我试图将变量插入变量,我尝试过,但它没有起作用:

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-ctCODEgabriel-pass,当用户输入gabriel(无论如何)以用户名输入CC_10时,必须将命令 set 与适当的字符串一起使用,并另外命令呼叫在变量字符串中扩展环境变量。例如,在通过环境变量上读取subshell cmd的答案以获取详细信息。

算术表达式是set /A之后的所有内容,Windows命令行解释器与平常完全不同。

有关命令行为的详细信息 setLocal endlocal 阅读此答案。

为了基本了解使用的命令及其工作方式,打开命令提示符窗口,执行以下命令,并完全仔细阅读所有命令显示的帮助页面。

  • call /?
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?

最新更新