我正在尝试制作一个文件,要求输入您的用户名和密码。注册时,密码保存在变量中。
问题是我必须为这些变量设置名称,这些名称将在您编写用户名时输入。例如,我需要用户“john”的密码。当用户记下用户名john时,它存储在变量%user1%
中。因为我需要创建变量%johnpass%
和“john”= %user1%
,所以我必须创建一个名为%%user1%pass%
的变量(变量INSIDE变量.CRAZY!)
还有另一种方法吗?
简单版本:
%user1%
%user1%
的密码%%user1%pass%
无效我真的很想知道! 如果您有注册和登录脚本,请告诉!!! 提前谢谢。
答案 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>下标。在您的情况下,您可能有两个数组:user
和pass
,两者都具有从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