簡體   English   中英

批量插入變量

[英]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-ctCODEgabriel-pass的值,必須將SET命令與相應的字符串配合使用,並且將CALL命令用於在環境變量內擴展環境變量。可變字符串。 閱讀有關將環境變量傳遞給Subshel​​l CMD的示例答案, 了解詳細信息。

算術表達式是set /A之后的所有內容,Windows命令行解釋器解釋的內容與通常完全不同。

有關SETLOCALENDLOCAL命令的行為的詳細信息,請閱讀此答案

要基本了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並非常仔細地閱讀針對每個命令顯示的所有幫助頁面。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM