1

登録して、ユーザー名とパスワードを要求するファイルを作成しようとしています。登録時に、パスワードは変数に保存されます。

問題は、これらの変数の名前、ユーザー名を書き留めたときに入力される名前を設定する必要があることです。たとえば、ユーザー「john」のパスワードが必要です。ユーザー名 john がユーザーによって書き留められると、変数 に保存されます%user1%。変数%johnpass%と "john"=を作成する必要があるため、 (Variable INSIDE a variable.CRAZY!)%user1%という名前の変数を作成する必要があります。%%user1%pass%

これを行う別の方法はありますか?

シンプルバージョン:

  1. ユーザーはユーザー名「john」を書き込みます
  2. 「john」は変数に保存され、%user1%
  3. 彼はパスワード「1q2p」を書きます
  4. このパスワードを変数に保存するにはどうすればよいですか:%user1%のパスワード
  5. %%user1%pass%動かない

どうしても知りたい!登録とログインのスクリプトがあれば教えてください!!! 前もって感謝します。

4

2 に答える 2

4

「遅延展開」を使用して、ネストされた変数の問題を解決できます。たとえば!%user1%pass!!は似%ていますが、展開を遅らせる必要があることを示しているため、最初に展開され、次に展開できるものが%user1%残ります。!johnpass!

完全なスクリプトは次のとおりです。

@echo off
setlocal enabledelayedexpansion

set /p "user1=Username: "
set /p "%user1%pass=Password: "

echo %user1%'s password is !%user1%pass!
于 2013-05-03T17:46:23.687 に答える
0

メソッドには重大な欠点があります。管理している変数の数をどうやって知るのでしょうか? user2次のユーザーが変数と次のユーザーを使用することをどのように知ることができますuser3か? ユーザーが1 人しかいない場合、パスワード変数はユーザー名を必要とせず、単に名前を付けることができることに同意する必要がありますpassよね?

この状況に対処するための標準的な方法は、配列を使用することです。同じ名前の変数(配列) を使用し、添字を介して異なる値を選択します。あなたの場合、 と の 2 つの配列を持つことができます。userどちらpassも 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]!
)

この投稿で、バッチ ファイルでの配列管理に関する詳細な説明を読むことができます: cmd.exe (バッチ) スクリプトの配列、リンクされたリスト、およびその他のデータ構造

于 2013-05-03T20:42:30.777 に答える