2016-06-23 4 views
2

私のコードは、これまでのようになります。バッチファイルで変数を持つ変数を作成できますか?

:start 
set a=0 
echo Enter Number: 
set /p b%a%= 
set /a a=%a%+1 
if %a% lss 5 goto start 
set x=1 
:show 
echo Number 1: %b%a%% 
if %x% lss 5 goto show 

これは可能ですか?それは配列のようですが、技術的にはそうではありません。

+0

多分醜いハックがあるかもしれません。実行時に実際のset/p文を含むechoを使ってバッチファイルを生成することができます。 –

+0

あなたが達成しようとしていることがわからない場合は、この記事に興味があると思います。[バッチ:TXT線を配列に解析](http://stackoverflow.com/a/30404094)... – aschipfl

答えて

2

はい、これは、以下のバッチコードが示すとおり可能です。

@echo off 
setlocal EnableDelayedExpansion 
set "a=1" 
:LoopEnterNumbers 
set /P "b%a%=Enter Number: " 
set /A a+=1 
if %a% lss 6 goto LoopEnterNumbers 
set "a=1" 
:LoopDisplayNumbers 
echo Number %a%: !b%a%! 
set /A a+=1 
if %a% lss 6 goto LoopDisplayNumbers 
endlocal 

startは、Windowsの標準コマンドです。ラベルとして使用することは可能ですが、使用することはお勧めしません。

プロンプトテキストは、コマンドset /Pで指定できます。
詳細については、How to set environment variables with spaces?を参照してください。

set /A以降のすべてが算術式として解釈され、+=もサポートされます。

環境変数の名前を別の環境変数で参照するには、遅延環境変数の拡張を使用する必要があります。

BTW:コマンドset bは、すべてname=valueという文字で始まるすべての環境変数をbで出力します。よりユニークな名前で、これは上記の使用されたループよりも変数を出力する方が良い方法です。使用するコマンドを理解し、どのように彼らは、コマンドプロンプトウィンドウを開き、そこに次のコマンドを実行し、完全にページが非常に慎重に、各コマンドのために表示されているすべてのヘルプを読んで、仕事のため

@echo off 
setlocal EnableDelayedExpansion 
set a=1 
:LoopEnterNumbers 
set /P "MyNumber#%a%=Enter Number: " 
set /A a+=1 
if %a% lss 6 goto LoopEnterNumbers 
for /F "tokens=2,3 delims=#=" %%I in ('set MyNumber#') do echo Number %%I%: %%J 
endlocal 

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?
+0

ありがとうございました!たくさん助けてくれた! –

関連する問題