2017-03-06 15 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 

I挿入したいと思います」ユーザー変数を%%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

は、入力された資格情報のデータを検証するために書き換えられたバッチコードです:set /P

@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 

バッチファイルのユーザーは、環境変数が現在の値を保持するか、まだその場合には何も入力しないでする自由を持っています前に定義されていない場合は定義されません。上記のバッチコードは、ユーザーにプロンプ​​トを表示する前に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に入ると、コマンドSETが拡大するCALLを環境変数gabriel-ctCODEgabriel-passの値を適切な文字列で使用され、さらにコマンドする必要があり得るため

変数stringの中の環境変数。詳細はPass environment variables to subshell CMDの回答を参照してください。

set /Aの後の算術式は、Windowsコマンドラインインタプリタによって完全に異なる解釈が行われます。SETLOCALとENDLOCALコマンドの動作の詳細については

this answerをお読みください。

使用されているコマンドとその動作の基本を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されるすべてのヘルプページをすべて慎重に読み込みます。

  • call /?
  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?
関連する問題