1

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

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

有没有其他方法可以做到这一点???

简单版:

  1. 用户写用户名“john”
  2. “约翰”保存在一个变量中,%user1%
  3. 他写了一个密码“1q2p”
  4. 如何将此密码保存在变量中:这将是:%user1%的密码
  5. %%user1%pass%不管用

我真的很想知道!如果有注册登录的脚本,请告知!!!提前致谢。

4

2 回答 2

4

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

这是一个完整的脚本:

@echo off
setlocal enabledelayedexpansion

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

echo %user1%'s password is !%user1%pass!
于 2013-05-03T17:46:23.687 回答
0

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

处理这种情况的标准方法是通过数组:使用同名变量(数组)并通过下标从中选择不同的值。在您的情况下,您可能有两个数组: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]!
)

您可以在这篇文章中阅读有关批处理文件中数组管理的详细说明: cmd.exe (batch) 脚本中的数组、链表和其他数据结构

于 2013-05-03T20:42:30.777 回答