컴퓨터 활용팁

[도스 배치 파일] 임시로 wait 명령어 구현하기(sleep)

할랑할랑 2009. 2. 6. 17:55
반응형

도스 배치 파일(batch process file command) 명령어에서, 임시로 wait(일정 시간동안 기다리게 하는 명령) 명령어 구현하기(sleep) 기다림

- 참고한 사이트 : http://malektips.com/dos0017.html (Implementing the WAIT Command in a Batch File)

1. MS-DOS, 윈도우 95, 윈도우 98, 윈도우 98 SE, 윈도우 7(비스타?) : choice 명령어의 활용

choice는 MS-DOS 거의 말기 버전에 추가되었던 외부명령어입니다. 사용자로부터 Y/N 등의 선택지 입력을 받아, ErrorLeve로 리턴해주는 명령어인데, 이 명령어에 "일정 시간 기다리다가, 자동으로 기본값(초기값/default value)를 선택한다"는 옵션이 있죠. 이 옵션을 활용하면 wait 명령처럼 써먹을 수 있습니다.

- 단점 : 윈도우 XP, NT 계열에는 이 명령어가 없어졌습니다.
(윈도우 7에서 부활했으나, 문법이 바뀌었습니다. choice /? 를 눌러 자세한 사용법을 익힌 후 사용하세요)


choice   /t:n,[원하는 시간(초)]   >   nul
예) 
윈도우 98 계열) choice /t:n,10 > nul
윈도우 7 계열) choice /t 10 /d n > nul

/t:n,[원하는 시간(초)] 옵션은, 원하는 시간동안 기다린 후, 자동으로 "N"을 입력한다는 겁니다.
> nul 리다이렉션(redirection)을 통해서 choice 명령어가 화면에 안보이도록 합니다.

※ 실제 동작 설명 : 10초를 기다린 후 자동으로 디폴트 값인 n을 입력한 것 처럼 동작하여, errorlevel값은 2번을 리턴합니다. 도스창에서 echo %errorlevel% 을 입력해보면 [y,n] 중 N이 두번째 값에 해당하므로 2를 리턴하는 것을 알 수 있습니다.


2. 윈도우 XP, NT 계열 : ping 명령어의 활용

이건 거의 꼼수에 가까운 건데... 수많은 기본 명령어 중에서, ping 이라는게 비교적 간단하게 시간을 보낼 수 있는 명령이라서 선택했나봅니다. 해당 링크에서는 -w 옵션으로 마치 1000 ms(1초) 간격을 만들 수 있는 것처럼 나와있는데, -w 옵션은 단순히 '핑 타임 아웃 시간 제한'일 뿐, 1초간 기다리게 하는 옵션은 아닙니다.

ping   127.0.0.1   -n 10   >   nul

127.0.0.1 주소(자기 자신)으로 10회의 핑을 보내는 겁니다. 대충 10초 가량 기다리게 할 수 있군요.
-n [원하는 횟수] 위 예제에서는 10회로 지정했지만, 더 적거나 많게 지정할 수 있겠죠. 1회가 대충 1초라고 생각하면 될 것 같습니다.

위 팁을 제시한 사이트에서는, ping 작업을 활용한 꼼수에 가깝기 때문에, 정확하고 정교한 다중 작업이 필요할때는 사용하지 마라고 권고하는 군요.

XP와 윈도우 2003의 경우에 Windows 2003 Resource Kit을 추가로 받아 설치하면, sleep 명령어가 생긴다고도 합니다만, 추가로 프로그램을 설치해야하는 번거로움이 있군요.
- 참고 : Batch sleep command ( http://malektips.com/xp_dos_0002.html )


3. timeout 명령(윈도우 서버 2003, 윈도우 7 이후 버전)

timeout /t [원하는 시간(초)]

사용자 키입력이 있을 때 까지, 원하는 시간 만큼 대기합니다.

timeout /t [원하는 시간(초)] /NOBREAK

NOBREAK 옵션을 주면 사용자 키 입력을 무시하고, 원하는 시간만큼 대기합니다. 단, 중단하려면 CTRL+C 키를 눌러줘야합니다.

timeout /t [원하는 시간(초)] > nul
timeout /t [원하는 시간(초)] /NOBREAK > nul

리다이렉션을 활용하여, 화면 출력(stdout, Standard Output)을 널 장치(무(無/null) 도스에서 Redirection 시에는 nul)로 보내주면, 대기한다는 메시지 없이 해당 시간 만큼 기다리게 할 수 있습니다.

timeout /t -1

시간을 -1초로 지정하면, 사용자 키 입력이 들어올 때 까지 무한정 대기합니다.
(참고: 마이크로소프트 테크넷, http://technet.microsoft.com/ko-kr/library/cc772996(v=ws.10).aspx)


※ 관련글
- [명령창] 윈도우 특정 폴더(디렉토리) 위치에서 명령창(커맨드 입력 창) 바로 열기: http://hallang.tistory.com/400
- [명령창] 바이너리 단순 분할 파일 합치기 - copy /b [a]+[b]+... 명령: http://hallang.tistory.com/243
- [명령창] 폴더 이름 좀 더 빨리 입력하기 - 윈도우 XP 명령 프롬프트에서 파일명 자동 완성 기능: http://hallang.tistory.com/242
- [명령창] 두 파일이 동일한 파일인지 비교하는 방법 - fc 명령어: http://hallang.tistory.com/241

반응형