2016-12-20 18 views
1

3つのカテゴリに2つの変数、合計6つの変数を設定しようとしていますが、3つのカテゴリをコピーするのは貧弱な選択肢のようです。変数の共有?バッチCMD

まず、どのカテゴリを変数(定数)に設定するかを尋ね、そのカテゴリに2つの変数を設定するように求められます。

私は、結合された変数で何かをしたいときまでうまくいきます。

@echo off 
cls 

:start 

cls 
echo which variable do you want to set? 
echo (1),(2),(3) 
choice /c 123 /n 
if ERRORLEVEL 3 goto :3 
if ERRORLEVEL 2 goto :2 
if ERRORLEVEL 1 goto :1 

:1 
set const=one 
goto :wizard 

:2 
set const=two 
goto :wizard 

:3 
set const=three 
goto :wizard 

:wizard 
set /p %const%_varA= set %const% variableA: 
set /p %const%_varB= set %const% variableB: 

:: this line is the problem 
echo %%const%_varA% 
echo %%const%_varB% 
:: 
echo. 
pause 
goto :filewrite 

echo. 

:filewrite 
echo one varA %one_varA% 
echo one varB %one_varB% 
echo two varA %two_varA% 
echo two varB %two_varB% 
echo three varA %three_varA% 
echo three varB %three_varB% 

pause 
goto :start 
+0

その変数にはどのような値が含まれていますか?あなたは '%const%_var1/2'の値を設定していますが、最後には' _varA'を使って決して何もしません。 – geisterfurz007

+0

申し訳ありませんが、A/Bに行くのが分かりやすくするための最後の変更でした。私はいくつかの行を変更していませんでした。 – ryan

+0

もう一度、良い点検し、固定しました – ryan

答えて

1

私は少し周りを果たしているとあなたが持っている問題は、バッチファイルで%を脱出する方法は別のものであるという事実です。したがって、コードは最終的にecho %const%_varA%のようになり、%var_A%が空である/存在しないため、取得する必要があるのは%constです。

幸運にも、これを防ぐために別のキャラクターをゲームに連れて行く方法があります。最初の行の下にsetlocal EnableDelayedExpansionを追加すると、感嘆符を使って変数にアクセスできるようになります。これは通常、括弧の閉集合内の変数にアクセスするために使用されるが、この1に重宝されています

@echo off 
setlocal EnableDelayedExpansion 
set const=three 
set %const%_varA=foo 
echo Without exclamationmarks: %%const%_varA% 
echo With exclamationmarks : !%const%_varA! 
pause 

は、問題を示し小さな例です。
上の行は、あなたが現在持っているものであり、動作していないものです。しかし、下の方は上記の遅延拡張を使用しています。
意味:最初に(%%const%の値が計算され、とに変更されます。!)の後に行が変わります。

気軽に質問してください:)

+0

おかげで@ geisterfurz007私は – ryan

+0

おかげで遊んだ...私は書くつもりだった...私はsetlocal EnableDelayedExpansion !私が他の所で読んだものから、間違った組み合わせがあったに違いない。あなたの説明は今すぐ送信されます。ヘルプに感謝します。ありがとう! – ryan