将变量批量插入变量中

时间:2017-03-06 15:43:05

标签: batch-file variables

我正在尝试将变量插入变量中,我试过这个,但它没有用:

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”变量插入此变量:%%user%-pass%

你能帮我吗?

1 个答案:

答案 0 :(得分:1)

以下是为验证输入的凭证数据而重写的批次代码:

@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个环境变量。

批处理文件用户还可以自由输入任何内容,包括批处理文件执行的关键字符,如%> <"等等。将variable=value赋值括在双引号中的原因,因为这会导致将输入的字符解释为文字字符,并在字符串比较中使用延迟扩展。

阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?Password system does not work上的答案,了解详情。

要在用户输入gabriel-ctCODE(在任何情况下)作为用户名时获取环境变量gabriel-passgabriel的值,请执行命令 SET 必须使用适当的字符串,并使用命令 CALL 来扩展变量字符串中的环境变量。有关详细信息,请参阅Pass environment variables to subshell CMD上的答案。

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

有关命令行为的详细信息 SETLOCAL ENDLOCAL ,请阅读this answer

要基本了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

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