2013-05-03 92 views
1

我正在試圖製作一個文件,要求輸入用戶名和密碼,並進行註冊。註冊時,密碼保存在變量中。嵌套環境變量

問題是我必須爲這些變量設置名稱,這些名稱會在您輸入用戶名時輸入。例如,我需要用戶「john」的密碼。當用戶名稱john被用戶記下時,它將儲存在變量%user1%中。因爲我需要做一個變量%johnpass%和「John」 = %user1%,我不得不因此創建一個名爲%%user1%pass%變量(可變內variable.CRAZY!)

是否有另一種方式做到這一點???

簡單的版本:

  1. 用戶寫入的用戶名 「約翰」
  2. 「約翰」 被保存在一個變量,%user1%
  3. 他寫道密碼 「1q2p」
  4. 我如何能夠拯救這個密碼在一個變量中:這將是:%user1%的密碼
  5. %%user1%pass%不起作用

我真的很想知道! 如果您有註冊和登錄腳本,請告訴!!! 在此先感謝。

回答

0

你有方法的一個重要的缺點:你怎麼知道多少不同的變量,你管理?你怎麼知道下一個用戶會使用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

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! 
+0

謝謝!聽說延期擴張,但從未意識到它可能會有多麼有用! – Swillfreat 2013-05-03 17:56:53

+0

不客氣。如果這回答了您的問題,請將其標記爲已接受。我發現你已經提出了一些其他的問題,你對答案留下了一些評論,說它有幫助 - 請考慮將其標記爲已接受。這有助於後面同一問題的其他人快速找到答案,並獎勵那些花時間回覆的人。 – 2013-05-03 18:05:19