2017-03-06 92 views
0

我試圖給一個變量插入一個變量,我已經試過這一點,但沒有奏效:插入變量到一個變量批量

set gabriel-ctCODE=fmfg1 


set /p user=Username: 
set /p password=Password: 
set /p ctCODE=ctCODE: 



if %password%== %%user%-pass% set /a loginerrorlevel=%loginerrorlevel%+1 
pause 
if %ctCODE%== "%%user%-ctCODE%" set /a loginerrorlevel=%loginerrorlevel%+1 
if not %loginerrorlevel%== 2 goto login.incorrect 
goto :aftercommand 

我想插入「用戶「變量:%%user%-pass%

你能幫我嗎?

+1

你的代碼不起作用,是無法解讀的。請提供例子。 – Magoo

+1

爲什麼你在用戶之前有兩倍?我們不知道你的代碼是做什麼的(你的代碼的* intent *),所以我們不知道什麼是合適的行爲或「不工作」。 – abelenky

+0

而不是'%password%== %% user%-pass%',您必須使用帶有EnableDelayedExpansion的'%password%==!%user%-pass!'。此管理解釋在[這個答案](http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990)雖然主題不同... – Aacini

回答

0

這裏被改寫爲驗證輸入的憑證數據批處理代碼:

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
set "gabriel-ctCODE=fmfg1" 
set "gabriel-pass=xxxyyy" 

set "UserName=" 
set /P "UserName=User name: " 
set "Password=" 
set /P "Password=Password: " 
set "ctCODE=" 
set /P "ctCODE=ctCODE: " 

call set "UserPass=%%%UserName%-pass%%" 
call set "UserCode=%%%UserName%-ctCODE%%" 

set "LoginErrorLevel=0" 
if "!Password!" == "!UserPass!" set /A LoginErrorLevel+=1 
if "!ctCODE!" == "!UserCode!" set /A LoginErrorLevel+=1 
if not %LoginErrorLevel% == 2 goto LoginIncorrect 
echo Entered credential data are valid for login. 
goto EndBatch 

:LoginIncorrect 
echo Enter credential data not valid for login. 

:EndBatch 
endlocal 

set /P批處理文件的用戶可以自由在這種情況下,環境變量保持其當前值或仍是進入什麼沒有定義,如果沒有定義之前。上面的批處理代碼確保在提示用戶之前未定義3個環境變量。

的批處理文件,用戶還可以自由進入任何東西,包括像%批處理文件執行的關鍵字符,><"等,這是封閉在雙引號中variable=value分配,因爲這會導致在解釋原因輸入字符作爲文字字符,並在字符串比較中使用延遲擴展。

閱讀關於Why is no string output with 'echo %var%' after using 'set var = text' on command line?Password system does not work的更多詳細信息的答案。

要獲得環境變量gabriel-ctCODEgabriel-pass的值時,用戶輸入gabriel(在任何情況下),爲用戶名,該命令SET必須以適當的字符串一起使用並且附加命令CALL擴大變量字符串中的環境變量。有關詳細信息,請參閱Pass environment variables to subshell CMD上的示例回答。

算術表達式是set /A之後的所有內容,它由Windows命令行解釋程序解釋,完全不同於平時。

有關命令SETLOCALENDLOCAL的行爲細節讀this answer

要了解所用命令及其工作原理,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。

  • call /?
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?