【问题标题】:Nested environment variables嵌套环境变量
【发布时间】:2013-05-03 17:23:37
【问题描述】:

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

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

还有其他方法吗???

简单版:

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

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

【问题讨论】:

    标签: variables batch-file


    【解决方案1】:

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

    这是一个完整的脚本:

    @echo off
    setlocal enabledelayedexpansion
    
    set /p "user1=Username: "
    set /p "%user1%pass=Password: "
    
    echo %user1%'s password is !%user1%pass!
    

    【讨论】:

    • 谢谢!听说过延迟扩展,但从未意识到它有多大用处!
    • 不客气。如果这回答了您的问题,请将其标记为已接受。我看到您还问了一些其他问题,您已将 cmets 留在回答中说这很有帮助 - 请考虑将这些问题也标记为已接受。这有助于稍后有相同问题的其他人快速找到答案,并奖励那些花时间回答的人。
    【解决方案2】:

    你的方法有一个重要的缺点:你怎么知道你在管理多少个不同的变量?你怎么知道下一个用户将使用user2 变量和下一个user3?您必须同意,如果只有 一个 用户,那么密码变量不需要用户名,可以命名为 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]!
    )
    

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

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      相关资源
      最近更新 更多