내 코드는 지금까지 다음과 같습니다배치 파일에 변수가있는 변수를 만들 수 있습니까?
: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
이 가능합니까? 그것은 배열과 같지만 기술적으로는 그렇지 않습니다.
내 코드는 지금까지 다음과 같습니다배치 파일에 변수가있는 변수를 만들 수 있습니까?
: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
이 가능합니까? 그것은 배열과 같지만 기술적으로는 그렇지 않습니다.
예, 가능합니다. 아래의 배치 코드를 참조하십시오.
@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 /?
감사합니다. 많은 도움이되었습니다! –
어쩌면 못생긴 해킹 일 수 있습니다 : 실제 set/p 문을 포함하는 echo를 사용하여 런타임에 배치 파일을 생성 할 수 있습니다. –
성취하려고하는 것이 확실하지 않은 경우이 게시물에 관심이있을 것으로 생각됩니다. [일괄 처리 : TXT 선을 배열로 파싱] (http://stackoverflow.com/a/30404094) ... – aschipfl