COMMAND.COM

`'''COMMAND.COM'''`은 도스와 윈도우 95, 98, ME 등을 기본으로 하는 운영 체제 셸의 파일 이름으로 명령 줄 해석기라 부른다.

시동 직후 첫 프로그램이 실행되면 `[[AUTOEXEC.BAT]]` 구성 파일을 실행하여 시스템을 설정할 책임을 가지고 뒤따르는 다른 과정을 밟게 된다.

## 운영 방식
도스 셸을 제공하며 두 가지 기능을 제공한다. 첫째로는 사용자가 명령어를 입력하면 즉시 실행하는 사용자 대화 방식이 있다. 둘째로는 일괄처리(배치) 방식이며 문자열이 담긴 `.[[배치 파일|BAT]]`라는 확장자를 가진 파일 안에 명령어들을 순서대로 나열해 두면 그 순서대로 명령어 처리기가 실행할 수 있다. `[[cmd.exe]]`는 윈도우 NT, 2000, XP, 2003, 비스타 등 OS/2에서 쓰이며 윈도우 NT 계열의 운영 체제에서는 OS 상에서 도스를 실행할 수는 없지만 가상 도스 머신을 이용하여 DOS 응용 프로그램들이 실행될 때 호환성을 제공하기 위해 쓰였다.

## 잘 알려진 내부 명령어
모든 명령어는 마지막 줄에  키가 눌린 뒤에만 실행된다. `COMMAND.COM`은 대소문자를 구별하지 않기 때문에 어느 문자열이나 대소문자가 섞여 있어도 같은 것으로 인식한다. 이를테면, dir, DIR, DiR, dIr, diR 모두 똑같이 동작한다.

### 파일 시스템 명령어
`COMMAND.COM`의 주 기능으로 여러 파일과 함께 동작할 수 있는 수많은 내장 명령어를 들 수 있다.

프로그램을 실행하려면, 단순히 실행 파일의 이름을 입력하고  키를 누르면 된다. 현재의 드라이브를 바꾸려면 드라이브 문자열에 콜론 기호를 덧붙이면 된다. (이를테면 D 드라이브로 이동할 때, `D:`) 다른 파일 시스템 명령어는 보통 다음의 것들을 들 수 있다:

; DIR : 지정한 디렉터리의 내용을 나열한다.
; CD, CHDIR : 현재 작업하는 디렉터리를 바꾸거나 현재의 디렉터리를 보여 준다.
; COPY : 파일을 디렉터리나 표준 입출력장치로 복사한다. 다수의 파일을 결합하거나 새로운 파일을 만들 수 있다. 대상이 이미 존재하면 MS-DOS는 기존의 대상을 대체할 것인지 묻는다. (디렉터리까지 완전히 복사하는 외부 명령어 XCOPY도 있다.)
; REN, RENAME : 파일이나 디렉터리의 이름을 바꾼다.
; DEL, ERASE : 파일을 삭제한다. 디렉터리로 사용될 때, 해당 디렉터리의 지정 파일을 지우지만 디렉터리 자체를 지우지는 않는다. 윈도우 XP와 윈도우 2000은 /S 옵션을 추가하면 하위 디텍터리도 삭제한다.
; MD, MKDIR : 디렉터리를 새로 하나 만든다.
; RD, RMDIR : 빈 디렉터리를 제거한다.
; VOL : 볼륨, 곧 디스크 이름과 일련번호를 보여 준다.
; LABEL : 볼륨, 곧 디스크 이름과 일련번호를 보여 주고 이름을 바꾼다.
; VERIFY : 파일 쓰기의 유효성을 확인하게 하거나 확인하지 않게 한다.
; TYPE : 파일의 내용을 보여 준다. (TYPE은 파일의 내용을 한 화면마다 끊어서 보여 주지 않지만, 외부 명령어 MORE는 파일의 내용을 끊어서 보여 준다.)

; BREAK : 로 프로그램 인터럽트 관리를 제어한다. 어떠한 과정의 동작을 멈출 때 사용한다.
; CLS : 화면을 지운다.
; CHCP : 현재의 시스템 코드 페이지를 보여 주거나 바꾼다. 한국어 코드 페이지를 띄우려면 chcp 949, 영문 코드 페이지를 띄우려면 chcp 437을 입력하면 된다. (MS-DOS 한글판에서는 hcode 명령어가 존재했는데 hcode /k라고 입력하면 chcp 949로, hcode /e라고 입력하면 chcp 437로 동작한다.)
; CTTY : 장치의 입출력을 정의한다.
; DATE : 시스템 날짜를 설정한다.
; ECHO : 문자열을 보여 줄지 보여 주지 않을지 정하거나 (`ECHO ON`, `ECHO OFF`) 사용자가 지정한 문자열을 화면에 보여 준다. (`ECHO 문자열`).
; LH, LOADHIGH : 프로그램을 상위 메모리로 올려 놓는다 (DR-DOS의 경우 `HILOAD`).
; LOCK : 외부 프로그램이 낮은 수준의 디스크 접근을 볼륨에 수행할 수 있게 한다. (윈도우 95/98/Me에서만)
; PATH : PATH 환경 변수의 값을 보여 주거나 변경한다. PATH로 연결된 실행 파일을 찾게 되며, 나중에 작업 디렉터리에 실행 파일이 없어도 PATH 변수에 걸린 디렉터리에 해당 프로그램이 있으면 실행하게 된다. PATH ; 라고 입력하면 기억된 모든 경로를 삭제한다.
; PAUSE : 사용자에게 계속하려면 아무 키나 누르라는 메시지를 보여 주고, 아무 키나 누르면 계속한다.
; PROMPT : PROMPT 환경 변수를 보여 주거나 변경한다. 프롬프트의 모습을 바꿀 수 있다.
; SET : 환경 변수의 값을 설정한다. 변수를 지정하지 않으면 정의된 모든 환경 변수를 보여 준다.
; TIME : 시스템의 시간을 설정한다.
; UNLOCK : 낮은 수준의 디스크 접근을 사용하지 않는다. (윈도우 95/98/Me에서만)
; VER : 운영 체제의 버전을 보여 준다.

## 제어 구조
제어 구조는 배치 파일 안에서 대부분 쓰인다.
; *레이블* : GOTO의 대상을 정의한다.
; FOR : 되풀이: 지정된 파일 그룹의 각 실행은 반복한다.
; GOTO : 지정된 레이블로 실행 위치를 이동한다. 레이블은 콜론(`:likethis`)과 함께 줄 맨 처음에 지정된다.
; REM : 주석: 실행을 무시할 문자열이다.
; IF : 프로그램의 실행 조건문이다. "IF EXIST F.EXE GOTO a"는 F.EXE 파일이 존재하면 a 레이블로 이동하라는 뜻이 된다.
; CALL : 배치 파일의 실행을 멈추고 다른 곳으로 돌아갔다가 계속 진행한다.
; EXIT : Command.com에서 빠져나와서 프로그램으로 돌아온다.
; SHIFT : 각 명령 줄 변수를 한 칸 뒤로 이동한다 (e.g. `%0`을 `%1`로, `%1`을 `%2`로, 등. )

## 변수
`COMMAND.COM`을 위한 배치 파일들은 다음의 네 가지 변수를 사용한다고 말할 수 있다:
# ERRORLEVEL
# 환경 변수들
# 명령 줄 매개변수
# "For" 변수들

## 리다이렉션과 파이프
; *명령어*  *파일이름* : 표준 출력을 파일로 리다이렉트한다. 대상 파일이 있으면 덮어씌운다.
; *명령어* >> *파일이름* : 표준 출력을 파일로 리다이렉트한다. 대상 파일이 있으면 그 아래 줄부터 추가한다.
; *명령어1* | *명령어2* : "명령어 1"의 표준 출력을 "명령어2"의 표준 입력으로 파이프 처리한다.

도스가 단일 작업 운영 체제이기 때문에, 파이프는 임시 파일로, 또는 임시 파일로부터 리다이렉트하면서 명령어들을 순서대로 실행하면서 처리한다. `COMMAND.COM`은 표준 오류 채널을 리다이렉트 하지 못한다.

## 버그 및 제한
명령 줄의 길이는 최대 128 문자이다. 명령어를 실행할 때 언제나 참 값을 반환한다.

## 같이 보기
* 셸
* CMD.EXE
* 도스 명령어 목록

## 각주

## 외부 링크
* BAT 파일: 도스 배치 파일 프로그래밍 강좌
* 윌리엄과 린다 앨렌의 윈도우 95/98/ME의 ERRORLEVEL 문서 (작은 ZIP 파일)
* command.com 웹사이트 (인터넷 저장 문서)

분류:셸
분류:스크립트 언어
분류:도스용 파일
분류:외부 도스 명령어