[英]insert a variable into a variable in batch
我正在嘗試將變量插入變量,我已經嘗試過了,但是沒有用:
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%
請問你能幫幫我嗎?
這是為驗證輸入的憑據數據而重寫的批處理代碼:
@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
分配括在雙引號中的原因,因為這會導致解釋輸入的字符作為文字字符,並在字符串比較中使用延遲擴展。
在命令行上使用“ set var = text”后,閱讀有關為什么為什么沒有字符串與“ echo%var%”輸出的答案? 並在“ 密碼”系統上無法獲取更多詳細信息。
當用戶輸入gabriel
(無論如何)作為用戶名時,要獲取環境變量gabriel-ctCODE
和gabriel-pass
的值,必須將SET命令與相應的字符串配合使用,並且將CALL命令用於在環境變量內擴展環境變量。可變字符串。 閱讀有關將環境變量傳遞給Subshell CMD的示例答案, 以了解詳細信息。
算術表達式是set /A
之后的所有內容,Windows命令行解釋器解釋的內容與通常完全不同。
有關SETLOCAL和ENDLOCAL命令的行為的詳細信息,請閱讀此答案 。
要基本了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並非常仔細地閱讀針對每個命令顯示的所有幫助頁面。
call /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.