嵌套环境变量

时间:2013-05-03 17:23:37

标签: variables batch-file

我正在尝试制作一个文件,要求输入您的用户名和密码。注册时,密码保存在变量中。

问题是我必须为这些变量设置名称,这些名称将在您编写用户名时输入。例如,我需要用户“john”的密码。当用户记下用户名john时,它存储在变量%user1%中。因为我需要创建变量%johnpass%和“john”= %user1%,所以我必须创建一个名为%%user1%pass%的变量(变量INSIDE变量.CRAZY!)

还有另一种方法吗?

简单版本:

  1. 用户写入用户名“john”
  2. “john”保存在变量%user1%
  3. 他写了一个密码“1q2p”
  4. 如何在变量中保存此密码:%user1%的密码
  5. %%user1%pass%无效
  6. 我真的很想知道! 如果您有注册和登录脚本,请告诉!!! 提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用“延迟扩展”来解决嵌套变量的问题。例如,!%user1%pass!!%类似,但表示扩展应该延迟,因此%user1%将首先展开,留下!johnpass!可以扩展下来。

这是一个完整的脚本:

@echo off
setlocal enabledelayedexpansion

set /p "user1=Username: "
set /p "%user1%pass=Password: "

echo %user1%'s password is !%user1%pass!

答案 1 :(得分:0)

您的方法有一个重要的缺点:您如何知道您管理的变量有多少?您如何知道下一位用户将使用user2变量和下一位user3?您必须同意,如果只有一个用户,那么密码变量不需要用户名,只能命名为pass,对吗?

处理这种情况的标准方法是通过数组:你使用一个带有同名的变量(数组)并通过一个<从中选择不同的值EM>下标。在您的情况下,您可能有两个数组:userpass,两者都具有从1开始的相同数字下标。例如:

@echo off
setlocal EnableDelayedExpansion
set index=0

:nextUser
set /A index+=1
set /P "user[%index%]=Username: "
set /P "pass[%index%]=Password: "

rem Display data of user[1]:
echo %user[1]%'s password is %pass[1]%

rem Display data of all users, from 1 to %index%
for /L %%i in (1,1,%index%) do (
   echo !user[%%i]!'s password is !pass[%%i]!
)

您可以在此帖子中阅读批处理文件中有关阵列管理的详细说明: Arrays, linked lists and other data structures in cmd.exe (batch) script