자주 사용하는 여러 개의 명령을 하나의 파일로 묶어 간단하게 처리하는 배치파일을 만들어보자.
군대에서는 고참이 왕이다. 고참이 졸병들의 군기를 잡을 때 특히 신병들에게 기압을 줄 때 가장 간단한 것이 '열중쉬어'와 '차려'를 빠르게 반복하는 것이다. 고참은 처음에는 느리게 그러다가 점차 빠르게 '열중쉬어'와 '차려'를 반복한다. 그러면 졸병의 동작은 그에 맞춰 빨라진다. 그런데 고참은 명령을 반복하는 동안 복잡한 명령이 귀찮아진다. '열중 쉬어'와 '차려'를 빨리 발음하다 보면 실수하기도 쉽고, 웬만큼 졸병들이 적응할 수도 있기 때문이다. 그래서 고참은 수를 쓴다. "이제부터 '열'이면 '열중쉬어'고 '차'면 '차려'다"라고 선언한다. 그러고 나면 고참이 '열!차!열!차!열!차!'를 외치는 1초 동안 졸병은 열중쉬어 차려를 세 번씩 반복해야 한다. 시간이 지나 이것마저도 귀찮아진 고참은 손가락을 까딱해 '열중쉬어'와 '차려'를 반복하게 한다.
컴퓨터 사용자인 우리도 컴퓨터를 마치 졸병처럼 부릴 수 있다. 매번 복잡한 명령을 내릴 것이 아니라 손가락 하나만 까딱해도 알아서 척척 움직이게 할 수 있다. 이번 호에는 이렇게 명령을 간편하게 처리하는 배치파일(batch file)에 대해 알아보자.
손가락 하나만으로 척척 움직여
컴퓨터를 사용하다 보만 일련의 명령을 계속 반복해야 할 때가 있다. 이 경우 몇개의 명령을 하나의 파일에 입력해두고 그것을 자동적으로 실행시킬 수 있다. 이와 같은 처리 방법을 일괄처리(batch processing)라고 부르며 일괄처리를 위해 일련의 명령어를 넣어둔 파일을 배치파일이라고 부른다.
일괄처리를 위해서는 일괄처리 파일을 작성한 후 파일명을 주어야 한다. 우선 파일명부터 이야기하면 배치파일의 파일명은 도스(MS-DOS)에서의 파일이름 정하는 규칙에만 맞으면 어떤 이름이라도 상관이 없다. 그러나 확장명에는 배치파일이라는 뜻의 .bat가 반드시 붙어 있어야 한다. 물론 실행시킬 때에는 다른 실행파일인 *.exe나 *.com처럼 *.bat라는 확장명까지 입력할 필요는 없다. 배치파일의 이름을 붙일 때 주의할 점은 배치파일명이 도스의 내부명령어와 같아서는 안 된다는 것이다. 이를테면 time date cls 등의 내부명령어를 사용한 time.bat나 date.bat cls.bat 같은 배치파일명은 있을 수 없다는 말이다. 설령 이런 배치파일이 있어서 이를 실행시키더라도 도스의 내부명령만이 실행될 뿐이다. 같은 이유로 도스의 외부명령 파일명과 같은 배치파일명도 피해야 한다. 만약 이름이 같고 확장자가 다르다면 도스는 다음과 같은 순서로 실행한다.
com파일 → exe파일 → bat파일
따라서 format.bat라는 파일명을 가진 배치파일을 작성한 후 이를 실행하기 위해 format이라는 명령을 내렸다면 컴퓨터는 우선 내부명령어인지 파악을 한 후 아니라면 현재의 디렉토리를 검색하는데 우선 format.com파일을 찾고 만약 이러한 파일이 있으면 실행을 시킨다. 그러나 format.com 파일이 없으면 format.exe 파일을 찾아 실행하고 이것마저도 없다면 그제서야 format.bat파일이 있나 찾아보아 그 내용을 실행한다.
아스키파일로 만들어야
이제 배치파일 만드는 방법을 알아보자. 배치파일을 만드는 방법은 의외로 간단하다. 자신이 입력하고자 하는 명령을 행을 바꾸어 가면서 입력을 한 뒤 적당한 파일명을 주어서 저장하면 된다. 즉 배치파일은 도스가 실행가능한 명령어들을 나열해놓은 하나의 문서파일에 지나지 않는다.
그러나 많은 사용자들이 이를 어려워하는 데는 다른 이유가 있다. 그것은 배치파일이 반드시 아스키 파일형식(ASCII file format)으로 저장되어야만 한다는 것이다. 아스키 파일이 무엇인지 몰라 어렵게 느껴지는 것이다.
여기서 아스키 파일에 대해 잠깐 이해하고 넘어가자. 잘 알다시피 컴퓨터는 문자를 2진수로 바꾸어 처리한다. 컴퓨터는 영어를 알아보기 위해서 알파벳 각 문자를 각각 수치로 바꾸어 이해한다. 이 때 알파벳마다 숫자를 대응시켜 놓은 것을 코드라고 한다. 아스키 파일(ASCII, America Standard Code for Information Interchange)이란 정보교환을 위해 미국에서 정해진 표준코드를 의미한다.
아스키 파일은 보통 에디터라고 부르는 것으로 만들 수 있다. 도스 5.0버전의 edit나 그 이하 버전에 들어있는 edlin, 그리고 프로그래머들이 많이 사용하는 qedit pe2 tgedit 등이 모두 에디터들이다. 워드프로세서가 등장하기 전부터 있었던 에디터는 주로 입력되는 글자의 크기나 서체 등을 무시하고 내용만을 편집하기 위한 프로그램으로서 크게 라인 에디터(줄단위로만 편집을 할 수 있는 것)와 풀스크린 에디터(화면 전체에 커서를 움직여 전체 화면에서 편집할 수 있는 것)가 있다.
도스 사용자들이 애용하던 edlin은 말 그대로 행단위 편집기다. 그러나 최근에는 사용하기 불편한 행단위 편집기보다 화면 단위로 편집할 수 있는 edit 같은 풀스크린 에디터가 주로 사용된다. 대부분의 프로그램 소스는 이러한 에디터로 작성된다. 에디터로 작성된 파일은 자동으로 아스키 형태로 저장된다.
자신의 하드디스크에 에디터가 없을 때, 배치파일을 워드프로세서로 작성해도 된다. 왜냐하면 배치파일은 이미 말한바 대로 문서파일이기 때문이다. 워드프로세서를 이용해 배치파일을 만들 때 주의해야 할 점은 반드시 아스키 파일 형식으로 저장해야 한다는 것이다. 보통의 워드프로세서는 파일 작성 후 저장할 때 자신만의 고유한 파일형식으로 저장하므로 파일 상호간에 호환성이 거의 없다. 심지어 우리가 가장 많이 사용하는 HWP(아래아 한글)의 경우 2.0판에서 작성한 파일을 1.52판에서 읽어들일 수 없다. 그러므로 배치파일 작성 후 저장할 때 반드시 '아스키로 저장'이라는 기능을 선택해서 저장해야 한다.
예를 들어 아래아 한글로 배치파일을 작성했다면 반드시 '서류철' 메뉴에서 '새이름으로 저장'을 선택한 후, 저장방식 항목중에서 '아스키파일'을 택해 저장해야 한다. 에디터도 없고 워드프로세서도 익숙치 않을 때는 도스의 copy 명령을 이용해 배치파일을 작성한다. 다음은 copy 명령을 이용해 배치파일을 작성한 예다. copy 명령어 다음에 나오는 con은 console의 약자로 화면을 말한다. 즉 화면에 입력되는 내용을 h.bat라는 파일로 저장하라는 뜻이다.
copy con h.bat〈엔터〉
cd c:\hwp〈엔터〉
hwp〈엔터〉
〈ctrl Z〉
한가지 명령이 입력되었으면 행의 끝에 반드시 〈엔터〉를 입력해야 한다. 맨 아랫줄에 있는 〈ctrl Z〉은 컨트롤 키와 z키를 동시에 누르는 것을 의미하는데 이는 컴퓨터에게 입력이 끝났음을 알리는 역할을 한다. 〈ctrl Z〉을 입력하면 화면에 "1 file copied"라는 메시지가 나오면서 h.bat라는 이름을 가진 배치파일을 생성시킨다. h.bat는 실행파일의 한 종류인 배치파일로서 이를 실행하기 위해서는 보통의 실행파일처럼 h.bat가 있는 디렉토리에서 실행하면 된다. 이제 h만을 입력하면 현재의 디렉토리가 자동으로 hwp로 바뀌고 hwp가 실행되는 것이다.
배치파일은 복잡한 입력을 간단한 키 조작으로 대체 할 수 있게 함으로써, 시간을 절약시켜줄 뿐 아니라 오타로 인한 재시행의 문제를 막아주므로 매우 편리하다. 그리고 항상 반복적으로 처리되어야하는 명령어들을 정확하고 신속하게 수행해준다. 더구나 배치파일에는 컴퓨터의 숙련자를 위하여 배치파일 내부에서만 사용 할 수 있는 조건 명령어 등 간단한 프로그래밍 언어를 제공한다. 이것을 잘 사용하면 웬만한 프로그램에 해당하는 복잡한 처리를 간단하게 할 수 있다.
배치파일을 실행도중에 중지시키기 위해서는〈ctrl C〉를 누른다. 그러면 "Terminate batch file? (y/n)"이라고 묻는 메시지가 나오는데 이때 y를 입력하면 배치파일은 더이상 실행되지 않고 멈춘다.
부팅시 자동실행되는 autoexec.bat
배치파일은 사용자가 마음대로 만들어서 사용할 수 있다. 그런데 배치파일중에는 자동실행 배치파일(autoexec.bat)이라는 특별한 배치파일이 있다. 이것은 컴퓨터를 켤 때 어떤 프로그램이나 환경설정이 규칙적으로 실행되어야 할 필요성이 많기 때문에 생겨난 것이다.
가령 컴퓨터를 켰을 때 항상 바이러스 체크를 하고 도깨비와 같은 한글 구동 프로그램을 실행시킬 필요가 있다면 이를 매번 입력하지 않고서 컴퓨터가 스스로 실행할 수 있도록 하면 좋을 것이다. 이를 위해 자동실행 배치파일을 활용한다. 컴퓨터가 부팅될 때 부팅이 되는 드라이브에서 이 파일은 자동으로 실행되도록 설계되어 있다. 만약 이 파일이 있으면 자동으로 실행한다. 그러나 자동실행 배치파일이 없으면 date 명령어와 time 명령어를 먼저 실행한다. 같은 컴퓨터라도 컴퓨터를 켜고 나서 화면에 나타나는 것이 다르다면 그것은 바로 autoexec.bat의 내용이 다르기 때문이다. 여러분의 컴퓨터가 부팅 직후에 date와 time을 물어보지 않는다면 컴퓨터의 부팅디스크에 autoexec.bat가 존재하기 때문이라는 사실을 알아야 한다.
autoexec.bat를 만드는 요령은 다음과 같다. 먼저 맨 첫머리에는 @ECHO OFF 명령을 넣어둔다. 이렇게 해두면 배치파일로 실행되는 명령들이 화면에 출력되지 않고 결과만 나타난다. @표시는 ECHO OFF라는 명령 자체도 화면에 나타나지 않게 하기 위해서 붙인 것이다.
다음 행에는 PATH 명령을 사용하여 자주 사용하는 프로그램이 들어 있는 디렉토리를 등록해둔다. 그러면 어떤 프로그램을 실행시키기 위해 구태여 그 디렉토리로 옮겨가지 않아도 실행할 수 있다. 루트 디렉토리나 도스 디렉토리 그리고 유틸리티 프로그램이 들어 있는 디렉토리 등은 PATH에 등록시키는 것이 효율적이다. PATH=C:\;C:\DOS;C:\NORTON;C:\PCTOOLS 등과 같이 각 드라이브와 디렉토리를 ;(세미콜론)으로 구분하여 계속 등록해두면, 어떤 프로그램을 실행시킬 때 일단 현재의 디렉토리를 찾아본 후에 그 프로그램 파일이 없으면 PATH 명령에 의해 등록된 순서대로 검색하여 실행시켜준다.
다음으로 필요한 항목이 바로 프롬프트(PROMPT)다. PROMPT 명령은 대개 PROMPT $P$G를 많이 사용하는데 이렇게 하면 가령 현재의 디렉토리가 도스 디렉토리일 때 C:\DOS〉같은 형식으로 나타난다. 항상 현재의 디렉토리가 무엇인지를 알려주기 때문에 매우 중요한 명령이다.
이러한 내용들 다음에는 자신이 실행시키고 싶은 프로그램 파일명을 등록하면 컴퓨터를 켤 때마다 그 프로그램이 실행된다. 대개 바이러스 체크프로그램인 V3.COM을 실행시키거나 쉽게 디렉토리 이동을 가능하게 해주는 NCD.EXE, 그리고 하드디스크의 시스템 영역에 들어 있는 정보를 안전하게 보호하기 위한 MIRROR나 IMAGE 프로그램 등을 자동으로 실행시키는 경우가 많다.
컴퓨터가 부팅된 후 자동적으로 아래아 한글 프로그램이 실행되도록 할 수도 있다. 이를 위해서는 간단히 autoexec.bat 파일 맨 마지막에 아래아 한글 프로그램이 들어있는 경로명과 실행파일인 HWP.EXE를 적어두면 된다.
초기조건을 최적화하는 config.sys
자동실행 배치파일과 성격이 매우 다르면서도 보완적인 역할을 하는 파일로서 config.sys라는 파일이 있다. 이 파일을 잘 이용하면 컴퓨터를 자신이 주로 사용하는 용도에 가장 적합하도록 환경설정 할 수 있다. 이와 같이 자신의 컴퓨터를 자신의 용도에 맞게 초기조건을 설정하는 일을 최적화(optimize)라고 한다.
최적화를 통해 자신의 컴퓨터 성능을 최대로 발휘할 수 있다는 점에 PC의 매력이 담겨져 있다. 특히 최적화는 컴퓨터의 사용을 한층 편리하게 해주고 컴퓨터에 있는 여러가지 자원을 최대한으로 이용하게 해주며 각종 편의를 제공함으로써 시간단축 효과도 노릴 수 있다.
config.sys 파일도 아스키 텍스트 파일로 되어 있어야 하므로 배치파일을 만드는 방식과 동일한 방식으로 만든다. 또한 이 파일은 루트 디렉토리에 있어야 효력이 있다. 그리고 새로 작성하거나 수정한 config.sys 파일이 그 효력을 발생하려면 반드시 부팅을 새롭게 시켜야 한다. 이러한 점들이 자동실행 배치파일과 config.sys 파일의 공통점이다.
프로그램 중지를 용이하게 - break
〈ctrl〉키와 함께 〈break〉키나 영문자 C를 동시에 누르는 것이 프로그램을 중단하게 하는 명령이다. 그러나 어떤 프로그램을 수행하는 중에는 이 키값이 먹혀들지 않는다. 그 이유는 이 키값이 도스의 표준 입출력 동작에만 작동하도록 설계되었기 때문이다. 따라서 도스가 아닌 다른 프로그램은 〈ctrl〉과 〈break〉 두 키를 동시에 눌러도 강제로 중단되지 않는다. 그러나 config.sys 파일 안에 break=on 이라고 등록해두면 대부분의 프로그램을 수행 도중 중단시킬 수 있다(사실은 이렇게 해도 되지 않는 경우도 많다). 일단 등록해두면 어떤 프로그램의 끝내는 키를 잘 모를 때 유용하게 사용할 수 있다. 이 명령은 도스 프롬프트 상에서 break라고 입력 하면 현재가 on 상태인지 off 상태인지 화면에 출력 된다. 그리고 도스 프롬프트에서 break=on 또는 break=off라고 지정할 수도 있다.
여러개의 파일을 동시에 사용 - files
프로그램을 사용하다 보면 여러개의 파일을 동시에 열어놓고 작업을 해야하는 경우가 있다. 여기서 파일을 연다는 것은 몇개의 파일이 동시에 메모리에 기억된다는 것을 의미한다. 도스는 원래 단일 사용자 단일 업무(single user single tasking) 위주로 설계되었기 때문에 동시에 많은 파일을 열어놓고 작업할 수 없었다.
그러나 PC의 사용이 복잡해지면서 여러개의 파일을 동시에 열어놓고 작업해야 할 필요성은 점점 더 증대되었다. 문서를 작성할 때 하나의 문서를 작성하는 것, 즉 하나의 파일을 열어놓고 작업하는 것이 일반적인 경우지만 몇개의 파일에 흩어져 있는 내용을 한 군데로 모으는 작업을 할 경우 하나의 파일만 열어서는 작업을 할 수 없다. 즉 여러개의 파일들을 동시에 열어놓고 필요한 내용을 발췌해 새로운 파일에 집어넣어야 한다.
도스에서는 별다른 조치가 없는 한 최대 8개까지 파일을 동시에 열 수 있도록 제한하고 있다. 따라서 30개 정도로(데이터베이스 프로그램을 사용하려면 동시에 열어야 하는 파일의 개수가 최소한 이 정도는 되어야 한다) 늘이기 위해서는 files=30이라고 등록하면 된다. 특히 데이터베이스 프로그램을 사용하다가 "too many files open"이라는 메시지가 나오면서 프로그램이 중단되었다면 반드시 config.sys 파일에 files=〈숫자〉부분에서 숫자를 현재의 숫자보다 크게 잡아야 한다.
컴퓨터 속도를 빠르게 - buffers
컴퓨터는 가장 최근에 사용했던 명령을 다시 사용하는 빈도가 높다. 그런데 명령어가 메모리에 남아 있다면 재차 실행시켰을 때 빨리 수행될 수 있지만 대부분의 경우 하나의 명령을 완수하면 자동으로 이 명령은 메모리로부터 제거된다. 따라서 재차명령이 수행되기 위해서는 하드디스크로부터 그 명령이 담긴 파일이 메모리로 다시 불려와야 하는데 하드디스크를 읽는 시간은 메모리에 남아 있는 명령을 참조하는 시간에 비하면 엄청나게 길다. 아무리 빠른 하드디스크라도 메모리보다는 5배 정도 느리기 때문이다.
이에 따라 컴퓨터의 수행속도를 빠르게 하는 방편의 하나로 메모리의 일부를 가장 최근 수행된 명령들을 저장해두는 창고로 사용하는 방법이 고안되었는데 이것이 바로 buffer(완충지대라는 뜻)공간이다. 버퍼는 모든 컴퓨터에서 작동되고 있다. 이를 확인하는 것은 간단하다. 우선 dir이라는 명령을 한번 내려보자. 수행되는 속도를 주목하면서. 다시 한번 dir 명령을 내려보자. 두번째 dir 명령을 내렸을 때 보다 빠르게 결과가 출력되는 것을 분명히 알 수 있을 것이다.
버퍼의 수가 많으면 버퍼의 크기가 커져 프로그램이 파일을 입출력하는 속도를 빠르게 해준다. 그러나 버퍼는 1개당 5백12바이트의 메모리를 차지하므로 필요 이상으로 많이 설정하면 메모리를 낭비할 수도 있다. 보통 10에서 30 정도가 적당하다.
다양한 비표준 장치를 쉽게 사용 - device
도스의 프로그램 중에 확장명이 *.exe나 *.com *.bat 등으로 되어 있는 실행파일이 있는데 이런 파일들은 파일명을 입력하면 무엇인가 실행되기 때문에 사용자와 금새 친해진다. 그러나 확장명이 *.sys로 되어 있는 파일의 경우 파일명을 아무리 입력해도 컴퓨터는 거부반응만 일으킨다. 이 파일들은 무엇을 하는 파일이며 어떻게 사용하는 것일까.
ramdrive.sys 파일은 흔히 상용메모리라고 부르는 6백40KB 이외의 메모리를 마치 하드디스크처럼 하나의 가상적인 드라이브로 만들어주는 파일이다. 이것을 잘 사용하면 매우 빠른 드라이브를 추가로 장착한 것과 마찬가지 효과를 거둔다. 그러나 아무리 도스 프롬프트 상에서 ramdrive.sys라고 입력해도 "Bad command or file name"이라는 메시지만 출력될 뿐이다. 이렇게 확장명이 .sys로 끝나는 파일을 구동(실행이라고 하지 않는다)시키기 위해서는 config.sys 파일에 device=〈장치파일명〉과 같은 형식으로 등록을 해주어야 한다. 이렇게 확장명이 *.sys로 되어있는 파일은 크게 보아 도스 등 운영체제에서 제공되는 소프트웨어적인 것과 어떤 하드웨어를 컴퓨터에 새롭게 장착할 때 하드웨어와 더불어 제공되기도 하는 하드웨어적인 것 두가지가 있다.
ramdrive.sys는 도스에 들어 있는 소프트웨어 장치 파일인데, 하드웨어에 따라오는 장치파일로 가장 대표적인 것은 mouse.sys 파일이다. 만약 새롭게 마우스를 구입해 그것을 컴퓨터의 뒷부분에 마련되어 있는 마우스 포트에 끼우면 저절로 작동이 될까. 대답은 '안됨'이다. 왜 그럴까?
컴퓨터를 부팅할 때 부팅에 꼭 필요한 세가지 파일 중에 io.sys라는 파일이 있는데 여기에는 컴퓨터의 표준 입출력장치를 사용하는 방법이 들어 있다(여기서 io는 input과 output의 약자). 그러나 마우스와 같이 표준 입출력장치가 아닌 것들 예를 들면 화상입력장치인 스캐너라든지 컴퓨터설계에 사용되는 디지타이저, 그리고 컴퓨터에서 한글 입출력을 가능하게 해주는 한글카드 등의 장치들을 사용하기 위해서는 각 하드웨어의 구입시에 같이 제공되는 하드웨어 구동 프로그램을 config.sys에 등록해주어야 한다. 이렇게 해야 비로소 마이크로프로세서는 부팅시 제일 먼저 msdos.sys(마이크로프로세서로 하여금 파일관리 방법을 인식시킨다)를 메모리로 읽어들인 다음 io.sys를 읽어들이고, 부팅디스크의 루트 디렉토리에 config.sys 파일이 있으면 이를 읽어들여, 추가적으로 장착된 비표준 입출력 장치 또는 도스의 소프트웨어적 장치들을 인식하여 이를 설치한다.
이 다음에는 명령어 해석기인 command.com을 읽어들이는데 이것이 끝나야 비로소 자동실행 배치파일을 찾아서 실행시키는 것이다. 사실 부팅이라는 것은 매우 간단한 것 같아보이지만 여기에 참여하는 파일은 평상시 위에서 열거한 5개나 되는 것이다. 더구나 config.sys나 autoexec.bat 파일에는 다른 파일들을 등록해 놓을 수 있기 때문에 부팅과정에 참여하는 파일들은 10여개가 넘을 수도 있다.
디바이스 파일의 종류
우선 도스에서 제공하는 유용한 디바이스 파일에는 어떤 것들이 있으며 각각 무슨 역할을 하는지 알아보자.
himem.sys : 6백40KB 상용메모리 위에 있는 연장 메모리를 사용할 수 있도록 하는 메모리 관리자. 대부분의 사용자들이 1메가바이트(MB) 이상의 메모리를 가지고 있으므로 이 파일을 config.sys에 등록해야만 6백40KB 이상의 메모리를 사용할 수 있다. 가능한 한 이 파일의 등록은 config.sys 파일의 제일 윗부분에 해두는 것이 좋다.
smartdrv.sys : 위에서 설명한 버퍼와 방식은 상이하지만 컴퓨터의 실행속도를 개선하는데 사용되는 캐시파일이다. 직전에 읽었던 하드디스크의 내용을 메모리의 일정영역에 보관하였다가 하드디스크를 재차 읽어들일 때 하드디스크를 다시 읽을 필요없이 메모리에서 바로 자료를 제공하는 기능을 함으로써 컴퓨터 속도를 빠르게 한다.
emm386.sys : himem.sys와는 조금 다른 방식의 메모리 관리자로서 특히 확장메모리를 요구하는 프로그램을 사용하기 위해 쓰이는 메모리 관리자 프로그램.
ramdrive.sys(=vdisk.sys) : 메모리를 가상적인 드라이브로 만들어 주는 장치이다. 이를 사용하여 만들어진 드라이브는 매우 빠른 속도를 가지나 컴퓨터의 전원을 꺼버리면 메모리의 내용과 마찬가지로 사라져 버리는 특성을 가지고 있으므로 사용상 주의를 요한다.
ansi.sys : 키보드와 화면을 위한 파일로서 프로그램을 위한 커서의 위치 조작이나 화면 표시를 변경하거나, 키보드를 재할당하는 등의 목적으로 쓰여진다.