2017-01-06 3 views
1

アレイのように2つのネストされた変数を同時に使用するように書くにはどうすればよいですか?私はユーザー(配列番号は1からその数まで)で指定された数の変数を作成しようとしており、その名前もユーザー(配列名)によって指定されていますが、これを実行すると何も返されません。誰も私を助けることができますか?あなたがDelayedExpansion欠けているエコーコマンドでネストされた変数を使用する方法

echo how many people? 
set /p number= 
echo. 
echo. 
for /l %%a in (1,1,%number%) do (
    echo name of %%a person 
    set /p s%%a = 
    echo. 
    echo. 
    echo. 
    if %%a==%number% (
     echo names are 
     pause 
     for /l %%n in (1,1,%number%) do (
      echo name %%n is %s%%a% 
     ) 
    ) 
) 
+0

それは変数名の一部にならないために遅れた拡張を逃すだけでなく、あなたが 'セット/ PS %% A ='で '='記号の前に_space_を削除する必要がありますが... – aschipfl

+1

を参照してください[この回答](http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990) – Aacini

答えて

1

だから何あなたがやろうとしていると、バッチファイルがネイティブの配列を持っていないとして、疑似配列を作成することです。だから、予想される出力を得るために遅延拡張を使用する必要があります。

@echo off 
SetLocal EnableDelayedExpansion 
echo how many people? 
set /p number= 
echo. 
echo. 
for /l %%a in (1,1,%number%) do (
    echo name of %%a person 
    set /p s%%a= 
    echo. 
    echo. 
    echo. 
    if %%a==%number% (
     echo names are 
     for /l %%n in (1,1,%number%) do (
      echo name %%n is !s%%n! 
     ) 
    ) 
) 
pause 
0

:その中にアクセスしたとき、その中に変更バッチで

parentheseisの閉じられたブロックを一度に計算されますので、変数の値は、通常の%myVar%使用して表示されません。

ただし、setlocal EnableDelayedExpansionをスクリプトの先頭に追加し、%myVar%!myVar!に変更してください。

ところでコマンド@echo offであなたは不必要なコマンドライン出力の多くを抑制することができます:)

+0

助けてくれてありがとうあなたは%myVar%!myVarを説明してください!私は何を置き換えるべきか理解していませんでした –

+0

例えば '%number% 'を'!number! 'に変更したなら'% 'を'! 'に変更してください。 – geisterfurz007

+0

私は何もしなかった –

関連する問題