Coding/Misc

배치파일에서 옵션 선택

smores 2013. 5. 9. 09:46

도스시절부터 도스모드 또는 커맨드프롬프트 모드를 상당히 유용하게 사용하고 있다. 주된 용도는 비슷한 일들을 배치 스크립트를 사용해서 자동화하는 것인데 간혹 배치스크립트에서 옵션 선택을 할 일이 있을 때 CHOICE 명령어를 쓰곤 하였다. 예를 들면 간혹 즐기는 DosBox 에서 다양한 모드로 시작하고 싶을때 (예를 들어 Hercules 그래픽이나 VGA 모드, 또는 자체 하드 이미지로 만들어 놓은 Win95 또는 Win98 이나 리얼도스 시스템으로의 부팅 등) 다음과 같이 CHOICE 명령어를 사용하곤 해 왔다.



CLS

@ECHO OFF

ECHO 1 - Run Win95 HDD

ECHO 2 - Run Win98 HDD

ECHO 3 - Run Dos HDD - VGA

ECHO 4 - Run Dos HDD - Hercules

ECHO 5 - Run DosBox DOS - VGA

ECHO 6 - Run DosBox DOS - Hercules


CHOICE /C 123456 /M "Pick a Number (1-6)  " 

IF ERRORLEVEL == 6 GOTO L6

IF ERRORLEVEL == 5 GOTO L5

IF ERRORLEVEL == 4 GOTO L4

IF ERRORLEVEL == 3 GOTO L3

IF ERRORLEVEL == 2 GOTO L2

IF ERRORLEVEL == 1 GOTO L1

GOTO END


REM ###############################

:L1

copy win95.conf dosbox.conf

dosbox_run.exe -noconsole

GOTO END


REM ###############################

:L2

copy win98.conf dosbox.conf

dosbox_run.exe -noconsole

GOTO END


REM ###############################

:L3

copy dos622vga.conf dosbox.conf

dosbox_run.exe -noconsole

GOTO END


REM ###############################

:L4

copy dos622herc.conf dosbox.conf

dosbox_run.exe -noconsole

GOTO END


REM ###############################

:L5

copy vga.conf dosbox.conf

dosbox_run.exe -noconsole

GOTO END


REM ###############################

:L6

copy herc.conf dosbox.conf

dosbox_run.exe -noconsole

GOTO END


:END



그동안 이 방식이 대부분의 시스템에서 전혀 문제 없이 사용해 왔었는데 (Win7 까지 포함해서) 최근에 VirtualBox 에 인스톨 해 놓은 WinXP 영문판 및 한글판에서 이상하게 CHOICE 명령이 듣질 않는다. 알고보니 CHOICE 명령어의 경우 외부 명령어인데 무슨 이유인지 VirtualBox에 인스톨해 놓은 시스템에 이 명령어 실행파일이 없는 것이었다 !!! (다른 시스템에 인스톨 해 놓은 WinXP 가상머신에서는 잘 동작했었다)


구글을 뒤져보니 이런 경우 CHOICE 명령어 대신 SET /P 명령어를 쓰라고 나온다. 위의 경우를 이 명령어로 대치해 보면 CHOICE 명령어 및 리턴 받는 인자를 ERRORLEVEL 로 하는 대신 더 깔끔하게 변수명으로 처리가 된다.



SET /P M=Pick a Number (1-6):

IF %M%==1 GOTO L1

IF %M%==2 GOTO L2

IF %M%==3 GOTO L3

IF %M%==4 GOTO L4

IF %M%==5 GOTO L5

IF %M%==6 GOTO L6

GOTO END