2016-06-23 3 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 명령은 문자 b으로 시작하는 name=value 형식의 모든 환경 변수를 출력합니다. 보다 고유 한 이름을 사용하면 위의 사용 된 루프보다 변수를 출력하는 것이 더 좋은 방법입니다. 사용 된 명령을 이해하고 작동 방법에 대한

@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 /?
,174,
+0

감사합니다. 많은 도움이되었습니다! –

관련 문제