도스시절부터 도스모드 또는 커맨드프롬프트 모드를 상당히 유용하게 사용하고 있다. 주된 용도는 비슷한 일들을 배치 스크립트를 사용해서 자동화하는 것인데 간혹 배치스크립트에서 옵션 선택을 할 일이 있을 때 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
'Coding > Misc' 카테고리의 다른 글
DoxBox QBasic Ctrl+Break (0) | 2014.07.01 |
---|---|
gwbasic 소스 락 해제방법 (1) | 2014.01.16 |
엑셀 매크로 - 고전게임(위자드리) 던전 매핑용 그리드 생성 (0) | 2013.11.19 |
Special Charaters - Alt keyboard sequence (0) | 2013.05.09 |
낮설은 C/C++ 코드 (0) | 2008.02.21 |