RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

< 도스창에서 help 를 타이핑해보자. >


Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

I:\>help

특정 명령어에 대한 자세한 내용이 필요하면 HELP 명령어 이름을 입력하십시오.
ASSOC    파일 확장명 연결을 보여주거나 수정합니다.
AT       명령어와 프로그램의 실행을 스케줄합니다.
ATTRIB   파일 속성을 표시하거나 바꿉니다.
BREAK    확장된 CTRL+C 검사를 설정하거나 지웁니다.
CACLS    파일의 액세스 컨트롤 목록(ACL)을 표시하거나 수정합니다.
CALL     한 일괄 프로그램에서 다른 일괄 프로그램을 호출합니다.
CD       현재 디렉터리 이름을 보여주거나 바꿉니다.
CHCP     활성화된 코드 페이지의 번호를 표시하거나 설정합니다.
CHDIR    현재 디렉터리 이름을 보여주거나 바꿉니다.
CHKDSK   디스크를 검사하고 상태 보고서를 표시합니다.
CHKNTFS  부팅하는 동안 디스크 확인을 화면에 표시하거나 변경합니다.
CLS      화면을 지웁니다.
CMD      Windows 명령 인터프리터의 새 인스턴스를 시작합니다.
COLOR    콘솔의 기본색과 배경색을 설정합니다.
COMP     두 개 또는 여러 개의 파일을 비교합니다.
COMPACT  NTFS 분할 영역에 있는 파일의 압축을 표시하거나 변경합니다.
CONVERT  FAT 볼륨을 NTFS로 변환합니다. 현재 드라이브는 변환할 수 없습니다.
COPY     하나 이상의 파일을 다른 위치로 복사합니다.
DATE     날짜를 보여주거나 설정합니다.
DEL      하나 이상의 파일을 지웁니다.
DIR      디렉터리에 있는 파일과 하위 디렉터리 목록을 보여줍니다.
DISKCOMP 두 플로피 디스크의 내용을 비교합니다.
DISKCOPY 플로피 디스크의 내용을 다른 플로피 디스크로 복사합니다.
DOSKEY   명령줄을 편집하고, Windows 명령을 다시 호출하고, 매크로를 만듭니다.
ECHO     메시지를 보여주거나, 명령어 반향을 켜거나 끕니다.
ENDLOCAL 일괄 파일에서 환경 변경의 지역화를 끝냅니다.
ERASE    하나 이상의 파일을 지웁니다.
EXIT     CMD.EXE 프로그램(명령 인터프리터)을 마칩니다.
FC       두 파일 또는 파일의 집합을 비교하여 다른 점을  표시합니다.
FIND     파일에서 텍스트 문자열을 찾습니다.
FINDSTR  파일에서 문자열을 찾습니다.
FOR      파일 집합에서 각 파일에 대해 지정된 명령을 실행합니다.
FORMAT   Windows에서 사용할 디스크를 포맷합니다.
FTYPE    파일 확장 연결에 사용되는 파일 형식을 표시하거나 수정합니다.
GOTO     Windows 명령 인터프리터가 일괄 프로그램에서 이름표가 붙여진 줄로 가게 합니다.
GRAFTABL Windows가 그래픽 모드에서 확장 문자 세트를 표시할 수 있게 합니다.
HELP     Windows 명령어에 관한 도움말을 제공합니다.
IF       일괄 프로그램에서 조건 처리를 수행합니다.
LABEL    디스크의 볼륨 이름을 만들거나, 바꾸거나, 지웁니다.
MD       디렉터리를 만듭니다.
MKDIR    디렉터리를 만듭니다.
MODE     시스템 장치를 구성합니다.
MORE     출력을 한번에 한 화면씩 표시합니다.
MOVE     하나 이상의 파일을 한 디렉터리에서 다른 디렉터리로 옮깁니다.
PATH     실행 파일의 찾기 경로를 보여주거나 설정합니다.
PAUSE    일괄 파일의 처리를 보류하고 메시지를 보여줍니다.
POPD     PUSHD 명령으로 저장된 디렉터리로 바꿉니다.
PRINT    텍스트 파일을 인쇄합니다.
PROMPT   Windows 명령 프롬프트를 바꿉니다.
PUSHD    현재 디렉터리를 저장한 후 디렉터리를 바꿉니다.
RD       디렉터리를 지웁니다.
RECOVER  불량이거나 결함이 있는 디스크에서 읽을 수 있는 정보를 복구합니다.
REM      일괄 파일 또는 CONFIG.SYS에서 주석을 기록합니다.
REN      파일 이름을 바꿉니다.
RENAME   파일 이름을 바꿉니다.
REPLACE  파일을 대체합니다.
RMDIR    디렉터리를 지웁니다.
SET      Windows 환경 변수를 보여주거나, 설정하거나, 지웁니다.
SETLOCAL 일괄 파일에서 환경 변경의 지역화를 시작합니다.
SHIFT    일괄 파일에서 바꿀 수 있는 매개 변수의 위치를 바꿉니다
.
SORT     입력을 정렬합니다.
START    지정된 프로그램이나 명령을 별도의 창에서 시작합니다.
SUBST    경로를 드라이브 문자로 지정합니다.
TIME     시스템 시간을 보여주거나 설정합니다.
TITLE    CMD.EXE 세션에 대한 창의 창 제목을 설정합니다.
TREE     드라이브 또는 경로의 디렉터리 구조를 그래픽으로 화면에 표시합니다.
TYPE     텍스트 파일의 내용을 보여줍니다.
VER      Windows 버전을 보여줍니다.
VERIFY   파일이 디스크에 올바로 쓰였는지 검증할지 여부를 지정합니다.
VOL      디스크 볼륨 이름과 일련 번호를 보여줍니다.
XCOPY    파일과 디렉터리 트리를 복사합니다.


! 빨간색은 일괄 파일(배치 프로그램) 안에서만 사용할 수 있는 명령어 이다. 명령어가 몇개 안되죠?


더 상세한 설명을 알고 싶다면 해당 명령어에 /? 를 하면 나올 것이다.

I:\>echo  /?
메시지를 보여주거나, 명령어 반향을 켜거나 끕니다.

  ECHO [ON | OFF]
  ECHO [메시지]

매개 변수 없이 'ECHO'라고 입력하면 현재 반향 설정값을 보여줍니다.

조낸 어렵게 해석된 말이 있다. 그 위대한 이름하야 반향... 한자어 중에서도 정말 어려운 말이다. 영어보다 우리말이 어째 더 어렵다. 우리말로 쉽게 풀어서 사용해야지..

반향이라는 요시꼬리한 한자를 해석해보자.


반향 [, echo]

음원()에서 나온 음파가 물체면에서 반사하여 다시 들려오는 현상.

말귀 알아듣게 쉽게... 울림, 메아리라는 뜻이다. 뜬금없이 반향이 왜 나오느냐? 컴퓨터는 우리가 입력한 어떠한 작업을 처리하면서 처리된 메세지를 밖으로 울리도록(표시 출력)하는 것을 말한다. 우리가 알아볼 수 있게 작업을 밖으로 출력을 할꺼냐 말꺼냐는 말이다.


##########################################################



요즘은 도스 명령어를 사용할 일이 거의 없다. 프로그래머들 조차도 말이다.

아 그렇지.. 그 당시 GW-BASIC이라는 언어를 배웠었는데 요게 향상된 게 요즘 쓰는 비주얼 베이직이다. GW-BASIC은 Visual Basic 의 어머니시지...

그 당시 GW-BASIC 과 함께 배우는 것이 도스 운영체제인 MS-DOS이다. 요건 내가 고등학교 1학년 때인가 잠깐 일주일에 1시간씩 들은 적이 있다.

매우 따분한 시간이었다. 그때 램은 8M 짜리였던가;; 그런 램도 있었을까? 지금은 1G를 넘는 램이 기본인데 말이다. 15년이 지난 지금  램은 그 때의 100배가 넘는다. 그만큼 컴퓨터의 성능이 획기적으로 개선되었다. 그리하여 현재의 그래픽 환경에서도 거뜬히 컴퓨터가 원활하게 작동할 수 있게 되었다.


batch 파일은 도스에서 순차적으로 명령을 실행하도록 하는 프로그램이다.

그냥 한줄씩 차례대로 실행한다. 한마디로 일자 무식한 넘이다. 쓰레드(한꺼번에 여러가지 작업)도 못하며, 아주 옛날 옛적에 만들어져서 객체지향 프로그래밍은 꿈도 꿀 수 없다.

그래서 나는 배치 프로그램을 원시인이라 부른다.

하지만 단순한 자동 실행 프로그램을 만들고 싶다면, 아주 금방 바로 만들 수 있어 유용하다.


#########################################################

## 각 새로운 도스창에 3가지 프로그램을 실행하는 일괄 프로그램이다.

@echo off
rem This is and auto-restart script for Emulator.
rem It will also keep the map OPEN after it crashes to that errors may be
rem more easily identified
rem Writen by romantic dog
echo Start script for Windoze
echo Edited by Evera (slightly) for SQL servers
start cmd /k logserv-sql.bat
start cmd /k charserv-sql.bat
start cmd /k mapserv-sql.bat


#########################################################


배치 프로그램이란 MS-DOS에서 실행 가능한 명령어를 순차적으로 처리하기 위하여 MS-DOS 명령어를 모아놓은 아스키 파일로, 일반적으로 BAT 확장명을 갖는다. 배치 프로그램은 흔히 배치 파일이라고도 한다.

배치 파일에서 사용할 수 있는 명령어는 MS-DOS에서 사용할 수 있는 모든 내부 외부 명령어, 배치 파일 전용 명령어로 구분된다. 배치 파일 전용 명령어란 프롬프트 상에서는 사용할 수 없고 배치 파일에서만 사용할 수 있는 명령어를 의미한다. 배치 파일에서는 BREAK, REM, SET 등 프롬프트 혹은 CONFIG.SYS 파일에서도 사용할 수 있는 공용 명령어와 2개의 특수 문자(@, ;)를 사용할 수 있다.

다음은 MS-DOS에서 사용되는 배치 프로그램 전용 명령어이다.

Call Choice Echo

For Goto If

Pause Rem Shift

SET 명령어는 프롬프트 상에서도 사용할 수 있는 명령어지만 주로 배치 프로그램에서 많이 사용되기 때문에 "프롬프트 명령어"에 포함하지 않고, 배치 파일 명령어에서 설명하기로 한다. 또한, REM 명령어도 CONFIG.SYS에서도 사용할 수 있는 명령어이지만 배치 파일 명령어에서 설명하기로 한다.

CALL

배치 프로그램에서는 COM이나 EXE 확장자를 가진 실행 파일은 해당 파일 이름을 입력함으로써 실행시킬 수 있다. 그러나 배치 프로그램은 이러한 방법을 사용하여 실행할 수 없다. 따라서 MS-DOS에서는 배치 프로그램을 실행하는 도중에 다른 배치 프로그램을 실행하기 위한 특별한 명령어를 준비하고 있다. 배치 프로그램에서 다른 배치 프로그램을 호출하기 위하여 사용되는 명령어는 CALL로써, 해당 배치 프로그램을 종료하지 않고 다른 배치 프로그램을 실행하기 위하여 사용한다.

배치 프로그램 안에서 다른 배치 프로그램을 호출할 경우에는 반드시 BAT 확장자를 생략하여야 한다. 즉, 배치 프로그램 안에서 실행 파일을 실행하기 위해서는 실행 프로그램의 이름만 입력하거나 확장자를 포함할 수 있었지만 배치 프로그램에서는 반드시 호출할 배치 프로그램의 파일 이름만 지정하여야 하는 것이다.

■ 사용법

CALL [[drive:][path]] filename [batch-para]

■ 옵션 및 매개변수

[drive:][path] filename 실행할 배치 파일의 경로와 이름을 지정한다. CALL 명령어를 사용하여 실행할 배치 파일은 반드시 BAT 확장자를 갖는 파일이어야 한다.

batch-para 배치 파일을 실행하기 위한 모든 변수를 지정한다. 지정할 수 있는 변수는 매개변수와 옵션을 포함한다.

■ 사용상 주의

☞ batch-para 사용하기

batch-para는 배치 파일에 전달할 수 있는 모든 정보를 포함할 수 있는데, 여기에는 옵션과 파일명, 그리고 %1∼%9까지의 변경할 수 있는 매개변수와 %band%와 같은 변수가 포함된다.

☞ 파이프(|)와 방향 전환 기호(>)의 사용

CALL 명령어에서는 파이프(pipes: |)와 방향 전환을 위한 방향 전환 기호(redirection symbols:>, <, >>, <<)를 사용할 수 없다.

☞ 반복적인 CALL 만들기

CALL 명령어를 사용하여 자신의 배치 파일을 호출함으로써 반복적인 배치 파일을 만들 수 있다. 이 경우처럼 반복적인 배치 파일을 만드는 경우에는 반드시 해당 배치 파일을 끝낼 수 있도록 설계되어야만 한다. 그렇지 않으면 무한 루프로 되어 해당 배치 파일을 영원히 끝나지 않게 된다.

■ 사용 예

HWPCHECK.BAT 파일을 다른 배치 파일에서 실행시키고자 한다면, 해당 배치 파일에 다음을 포함시킨다.

call hwpcheck

위의 예에서 현재 실행 중인 배치 프로그램에서 2개의 매개변수를 받은 다음 이를 실행할 배치 프로그램에 전달하고자 한다면 다음과 같이 뒤에 매개변수를 할당한다.

call hwpcheck %1 %2

CHOICE

이 명령어는 GOTO 명령어를 사용하여 다중 분기문을 작성하기 위하여 사용하는 것으로, 일반적으로 다중 배치 프로그램을 작성하기 위하여 사용되는 배치 프로그램 명령어이다.

이 명령어는 배치 프로그램에서 사용자가 지정한 프롬프트 상태를 유지하고 있다가 지정된 시간이 경과되거나 지정된 문자를 지정하면 다음 명령어를 실행한다. 이 경우 CHOICE 명령어는 에러 수준 종료코드를 운영 체제에 돌려주는데, 종료 코드와 GOTO 명령어를 이용하여 작업을 세분할 수 있다.

■ 사용법

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

■ 옵션 및 매개변수

text 사 용자가 선택하도록 기다리는 프롬프트 앞에 출력하고자 하는 문자열을 지정한다. 만약, 프롬프트 앞에 디스플레이될 문자열의 일부로 옵션 부호(/)를 사용하려면 따옴표를 사용해야 한다. 문자열을 지정하지 않는 경우에는 선택할 프롬프트만 디스플레이한다.

/c[:]choices 프 롬프트로 선택할 수 있는 문자를 지정한다. 다수의 문자를 지정하는 경우에는 콤마(.)를 분리 문자로 사용하며, 지정한 문자는 괄호안에 나타나고 물음표 다음에 디스플레이된다. /c 옵션을 지정하지 않는 경우 YN을 디폴트 값으로 사용한다. 콜론(:)은 선택적으로 생략할 수 있다.

/n 사 용자가 항목을 선택하도록 대기하는 프롬프트가 디스플레이되지 않도록 지정하기 위하여 사용한다. 그러나 프롬프트 앞의 문자열은 디스플레이된다. 만약, /n 옵션을 지정하지 않으면 CHOICE 명령어 라인에 지정한 선택 문자는 유효하다.

/s 대 소문자를 구분하여 받아들이도록 지정하기 위하여 사용하는 옵션이다. 만약, /s 옵션을 지정하지 않으면 사용자가 지정한 선택 문자의 대 소문자를 구분하지 않고 모두 받아 들인다.

/t[:]c,nn 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자와 기다리는 시간을 지정한다.

c 사용자가 선택 문자를 지정하지 않을 때 디폴트로 선택될 문자를 지정하고, 이 문자는 /c 옵션에서 지정한 선택 문자 안에 있는 것이어야 한다.

nn c 값을 디폴트로 선택하기 전에 대기할 프롬프트 시간을 지정한다. 지정할 수 있는 값의 유효 범위는 0∼99 값의 범위에서 초 단위로 지정한다. 만약, 0초를 지정하면 항상 디폴트 값이 사용된다.

■ 사용상의 주의

☞ 작업을 분할하기

CHOICE 명령어는 작업을 분할하기 위하여 사용한다. 즉, CONFIG.SYS 에서는 다중 부트 분할을 만들어 사용자가 원하는 시스템 구성으로 컴퓨터를 시작할 수 있다. AUTOEXEC.BAT에서는 이 명령어를 사용하여 다중 환경으로 구성할 수 있다.

CHOICE 명령어를 사용한 다중 부트 분할에 대해서는 다음에 설명할 "사용 예"를 참조하기 바란다.

☞ CHOICE의 메시지

다음은 배치 프로그램에서 CHOICE 명령어를 사용하는 방법과 그에 따른 메시지를 나타낸다.

CHOICE 명령어에 선택 문자만을 지정한 경우

명령어 줄 choice /c:ync

메시지 [Y,N,C]?

CHOICE 명령어에 선택 문자와 문자열을 지정한 경우

명령어 줄 choice /c:ync Yes, No, or Continue

메시지 Yes, No, or Continue [Y,N,C]?

CHOICE 명령어에 프롬프트를 생략하는 /n 옵션을 사용한 경우

명령어 줄 choice /n Yes, No, or Continue?

메시지 Yes, No, or Continue?

CHOICE 명령어에 /t 옵션을 사용한 경우

명령어 줄 choice /c:ync /t:y,5

메시지 [Y,N,C]?


#########################################


@echo


if not exist "D:\Program Files\Project A3\nul" (goto dhp)


:dhk
start /d"D:\Program Files\Project A3\" /normal A3.exe
exit


:dhp
@echo off


xcopy /D /Q /A /S /C /R /H /K /Y "\\file\on$\Program Files\Project A3\*.*" "D:\Program Files\Project A3\*.*"
start /d"D:\Program Files\Project A3\" /normal A3.exe
exit


##################################################


MS-DOS 기본 명령어

☆ 도스의 명령어는 크게 두 가지로 구분되어 있다.
컴퓨터가 부팅되면 기본적으로 실행이 가능한 '
내부 명령어'
와 별도로 만들어져 있는
프로그램을 이용하는 '
외부 명령어'가 있다

★ 명령의 기본 구조는 [명령어+내용+추가옵션]이다.
(예) copy *.* c: /y
◈ 모든 명령의 도움말은 [명령어 /?]로 볼 수 있다.
(예) dir /?
(1) 내부 명령어 (※ '\' 와 '₩' 는 같음)

명     령     어

의           미

사            용           예

DIR

파일 목록 출력

DIR : 현재의 디렉토리 내의 파일 목록 출력

DIR /P : 한 페이지씩 출력

DIR /W : 파일명과 확장명 만을 출력

DIR

DIR *.HWP

DIR C*.*

DIR *.EXE /W

DIR /W /P

MD

디렉토리 만듦

MD STUDY

MD C:\STUDY\HTT

MD C:₩STUDY₩HTT

CD

디렉토리 이동

CD STUDY

CD C:\STUDY\HTT

CD \

CD ..

RD

디렉토리 삭제

RD STUDY

RD C:\STUDY\HTT

COPY

파일 복사

COPY DOS.HWP A:

COPY FDISK.EXE A:\DOS

COPY C:\STUDY\HTT.EXE A:\

COPY C:\VB\*.EXE D:\TEMP

COPY A*.HWP C:\HWP\DOC

COPY K*.* B:\SAVE\ALL

COPY *.* A:\BACKUP

COPY ADD.TXT PRN

COPY CON AUTOEXEC.BAT

DEL

파일 삭제

DEL SWAP.TMP

DEL C:\DOS\READ.TXT

DEL *.BAK

DEL K*.HWP

DEL C:\TEMP\*.*

REN

이름 바꿈

REN SYS.COM SYSTEM.COM

REN *.HWP *.BAK

REN K*.COM A*.*

TYPE

파일 내용 출력

※ TYPE 명령은 일반 TEXT 파일의 내용만을 볼 수 있다.

TYPE README.DOC

TYPE C:\DOS\README.1ST

TYPE ME.TXT > PRN

기타 내부 명령어

CLS

화면을 깨끗이 지움


DATE

날짜 확인, 수정


TIME

시간 확인, 수정


PROMPT

프롬프트 변경


PATH

경로 설정


VER

도스 버전 확인


VOL

볼륨 레이블 확인


SET

환경 정보 확인/수정






(2) 외부 명령어

명     령     어

의           미

사            용           예

FORMAT

디스크 초기화

1. FORMAT /S : 시스템 파일 추가

FORMAT /Q : 빠른 포맷

FORMAT /4 : 360KB 디스크

FORMAT /U : 복구 자료 취소

FORMAT A:

FORMAT C: /S

FORMAT A: /Q /U

FORMAT A: /S /4

DISKCOPY

디스크 복사

DISKCOPY A: B:

DISKCOPY A:

LABEL

볼륨 레이블 수정

LABEL

LABEL A:

LABEL SAMPLE

ATTRIB

파일 속성 확인/변환

※ +는 설정, -는 취소

ATTRIB +(-)R : 읽기 전용 속성

ATTRIB +(-)A : 저장 속성

ATTRIB +(-)H : 숨김 속성

ATTRIB +(-)S : 시스템 속성

ATTRIB SYS.COM

ATTRIB +R C:\HNC\HWP.EXE

SYS

시스템 파일 복사

SYS A:

UNDELETE

삭제된 파일 복구

UNDELETE C:\SAM\KOEI.EXE

UNFORMAT

포맷 복구

UNFORMAT A:

XCOPY

COPY의 확장

※ XCOPY는 디렉토리까지 복사가 가능하다.

XCOPY /S : 서브 디렉토리 포함

XCOPY /E : 비어 있는 디렉토리까지 복사

XCOPY /A : 저장 속성을 가지고 있는 파일만 복사 (백업)

XCOPY *.* A: /S

XCOPY *.EXE C:\TEMP /A

CHKDSK

디스크 검사

※ 디스크 검사 및 에러 수정 가능

CHKDSK A:

CHKDSK C: /F

DOSKEY

키 기능 확장


FDISK

하드 디스크의 영역 나눔


FIND

지정된 파일에서 문자열 검색


MEM

현재 메모리 상태 출력

MEM/C/P

MIRROR

하드디스크의 기본 정보 기록

(UNFORMAT시 사용)

MODE

시스템 디바이스 상태 조정

MODE CO80

MORE

화면 단위로 쪼개어 출력

TYPE AUTOEXEC.BAT | MORE

SORT

주어진 자료를 정렬



# 도스 명령어

C:\>dir/p/w
디스크의 파일과 디렉토리를 한 화면씩 가로목록 형식으로 출력하는 명령어이다.

C:\>sys a:
3.5 디스켓을 넣고 부팅 가능하게 시스템 파일을A드라이브에 전송하라는 명령어이다. 만약 윈도우 98사용자라면 c:\windows\comand\ebd\폴더에 있는 파일을 전부 디스켓에 복사 하면 된다.

C:\DOS>copy .d:
C드라이브에 있는 DOS디렉토리의 모든파일(*.*과 같음)을 D드라이브에 카피하라는 명령어이다.

C:\>xcopy . d: /s
하드카피와 비슷한 명령어로 C드라이브에 있는 디렉토리와 파일들을 D드라이브로 복사한다는 명령어 이다.

C:\>diskcopy a: a:
A드라이브의 플로피 디스크의 내용을 다른 플로피 디스크에 똑 같이 복사할 때 사용하는 명령어 이다.

C:\>move sys.com d:\win
C드라이브에 있는 SYS.COM이라는 파일을 D드라이브에 있는 win디렉토리에 이동시킨다는 말이다.

C:\>ren kkn.txt kim.doc
파일의 이름을 kkn.txt에서 kim.doc로 바꾼다는 명령어 이다.

C:\>del . /P
C드라이브에 있는 루트 파일들을 확인 절차를 한후 전부 지운다는 명령어이다.

C:\>deltree windows
C드라이브의 windows디렉토리의 하위 폴더까지 전부 삭제하는 명령어다.

C:\>undelete command.com
지워진 command.com이라는 파일을 복구하라는 명령어이다.(도스에서 사용하고 윈도우 9x부터는 휴지통의 개념을 사용한다)

C:\>edit autoexec.bat
autoexec.bat 파일의 편집을 하기위한 명령어이다.

C:\>cd windows
windows디렉토리로 체인지 할 때 사용하는 명령어이다.

C:\>md 게임방
게임방 이라는 디렉토리를 만들려고 할 때 사용하는 명령어이다.

C:\>doskey
매크로를 만들 때 사용하는 명령어로서 그전에 입력했던 명령어를 화살표키로 출력시킬 수 있다.

C:\>fdisk
도스를 사용할 수 있도록 하드디스크의 파티션을 설정합니다.

C:\>format c: /q/s
하드디스크를 빠른 포맷하고 시스템파일을 복사하라는 명령어 이다.

C:\>chkdsk c: /f
C드라이브를 검사하여 오류가 있으면 수정하라는 명령어 이다.

C:\>scandisk /all
모든 지역 드라이브를 검사하고 오류가 있으면 수정하라는 명령어이다.

C:\>attrib -r -s -h msdos.sys
msdos.sys라는 파일의 숨김속성을 읽기,시스템파일속성,숨김파일 속성을 지정할 때 사용하는 명령어 이다.

C:\>attrib +r +s +h msdos.sys
msdos.sys라는 파일의 숨김속성을 읽기,시스템파일속성,숨김파일 속성을 해제 할 때 사용하는 명령어 이다.

C:\>mshbios /u 또는 hbios /u
한글 바이오스를 메모리에서 삭제하라는 명령어 이다.

C:\>nlsfunc
국 가별 정보를 로드할 때 사용하며 이 키가 autoexec.bat파일에 지정이 안되있으면 국가별 언어코드가 전환되지 않는다. 만약 국가별 코드전환이 안되면 autoexec.bat에 loadhigh c:\windows\ command\nlsfunc.exe c:\windows\country.sys라는 항목이 설정되어있는지 확인한다.

C:\>mem /c/p
시스템의 사용 중인 메모리와 사용할 수 있는 메모리 양을 유형별로 한페이지씩 보여 주는 명령어 이다.

※컴퓨터가 부팅되는 동안 도스가 수행하는 동작

ⓐ 본체에 전원을 넣는다
ⓑ 하드웨어 테스트 를 거친다(롬바이오스를 통해서)
ⓒ MSDOS.SYS , IO.SYS , COMMAND.COM시스템파일이 실행된다
ⓓ CONFIG.SYS 파일을 참고하여 시스템 환경설정 루틴을 실행한다.
ⓔ AUTOEXEC.BAT파일 내용을 실행한다.(파일에 관련된 정보)
ⓕ 도스가 실행되고 프롬프트가 나타난다.

2006/12/18 12:33 2006/12/18 12:33
이 글에는 트랙백을 보낼 수 없습니다
Window  2006/12/18 12:31

bat(배치)파일 문법
일괄처리(Batch) 파일 #1

1.배치파일(Batch File, 일괄처리용 화일)

1.1. 배치파일?
Batch(배치)는 '한 묶음','한벌'의 의미하며, 배치파일은 여러 가지 명령어를 한 파일에 모아 작업하는 파일, 즉 하나의 일을 처리하기 위해 여러번 내리는 명령어를 한 번만에 처리할 수 있도록 만들어 놓은 실행파일이다.

  ① 확장자 이름은 반드시 'BAT'이어야 한다.
  ② 파일명은 도스의 내부명령어 이름을 피하라.
  ③ COM, EXE 파일의 이름을 피하라.

  ④ 명령어 이름이 서로 같아 충돌할 때, DOS는 도스키-->내부명령-->외부명령( *.COM-->*.EXE)-->*.BAT) 순으로 실행한다.

    다만 '파일명.BAT'라고 확장자 이름까지 써서 명령을 내리면 이런 문제는 해결된다.

  ⑤ BAT파일은 표준 ASCII 문장(Text) 파일이어야 한다.


1.2. BAT파일 만드는 방법.
일반 도스 명령어와 배치전용 명령어를 사용하여 다음의 3가지 방식을 사용하여 아스키 문장파일 형식으로 만든다.

  ① COPY명령사용 ....  C:\>COPY CON XXXX.BAT
  ② 문서편집기 이용 ... 'EDIT', 'SAN'
  ③ 문서 작성기(WordProcessor) ..  아래한글,훈민정음 등


작성 예①)  C:\>COPY CON SAMPLE.BAT  <엔터>
─────       CLS
                DIR A:
                V3 C:
                ^Z
                1 File(s) Copied

<설명1> COPY 명령을 사용하여 텍스트 파일 만드는 방법을 이용한다.
CON은 장치 파일명으로 여기서는 키보드를 지칭한다.키보드로 입력한 문자를 SAMPLE.BAT라는 파일명으로 복사.출력하라는 뜻이다.

입력한 배치 내용을 보면
  화면을 깨끗이지우고(CLS), A드라이브의 파일목록을 보이라, 그리고 C 디스크에 바이러스 감염 여부를 점검.치료하라는 명령이다.

줄을 바꿀 때는 항상 엔터하면 된다. 끝낼 때는 언제나 Ctrl+Z 또는 F6키를 누르고 엔터하면 1개 파일이 복사되었다는 메시지가 나오면서 C루트에 SAMPLE.BAT란 파일이 1개 생긴다.

<실행> C:\>SAMPLE <엔터>하면 배치파일 내용 순서데로 명령을 실행한다.

-----

작성 예②)  C:\>EDIT <엔터>

     도스 편집기 화면이 뜬다.  이때  ESC키를 한번 눌러 메시지 상자를 제거하고 깨끗한 화면에다 첫째 줄부터 입력하되, 줄을 바꿀 때는 엔터한다.

               CLS
               DIR A:
               V3 C:

끝내려고 저장글쇠(@F,S)를 누르면 파일이름을 써넣으라고 상자자 나온다. SAMPLE.BAT라고 입력하고 <엔터>하여 저장한 후, 에디트를 끝(@F, X)낸다.그러면 C루트 디렉토리에 SAMPLE.BAT 라는 배치파일이 생긴다.

<실행> C:\>SAMPLE <엔터>하면    C루트에 있는 SAMPLE.BAT 파일이 실행된다.


******* 배치파일 내용에 파일스펙 경로명을 쓸 때 주의점.****

ⓐ 배치파일 내용 중에
  C:\GAME\SUPER\SUPER.EXE 라고 해놓으면

현재 도스 작업방을 바꾸지 말고 C:\GAME\SUPER\ 방에있는 SUPER.EXE를 실행하라는 뜻이기 때문에 경우에 따라서는 실행이 되지 않는다.

ⓑ 배치 내용을 아래와 같이 하면 틀림없이 실행하게 된다.
  C:
  CD\GAME\SUPER
  SUPER

현재 도스작업방이 먼저 C드라이브로 바뀌고,절대경로명 CD\GAME\SUPER
디렉토리로 이동한 후에 SUPER.EXE 파일을 실행한다            ******


1.3.배치파일 명령어들

① 일반적인 도스명령를 그대로 사용한다.

  CLS  COPY  DEL  DIR  DATE  TIME   PAYH   PROMPT  CHKDSK 등등.

② 배치에만 사용하는 전용 명령가 있다.
  ECHO   REM   PAUSE  CALL   GOTO    CHOICE   IF   FOR   SHIFT
(메아리)(설명) (쉼)  (부름) (가기)   (선택) (조건)(순환) (옮김)


ⓐ REM
  [베치파일 속에 달고 싶은 설명.주석]....설명이 화면에 나옴.

ⓑ PAUSE
  배치파일 실행중 일시 멈추게함.
  화면에 'Press any key to continue...'
          (계속하려면 아무키나 누르세요)

  배치실행을 중단하려면 Ctrl+C키를 누른다. 그러면 화면에
           'Terminate batch job (Y/N)?'
          (배치작업을 끝내겠읍니까?)  Yes / No

ⓒ ECHO 명령
형식> ECHO 문자열
      에코명령 다음에 오는 문자열을 화면에 나타낸다.

    ECHO ON
      이후부터 '명령어'라인을 화면에 보인다.(도스 초기값)

    ECHO OFF
      이후 실행되는 명령어 라인을 화면에 나타내지 않는다.
      화면이 깨끗하고, 화면출력속도.가독성 증가한다.
      'ECHO OFF'라는 그 자체까지 보이지 않게 하려면 @ 을 앞에 쓴
      다.( @ECHO OFF )

    ECHO
      현재 ECHO ON/OFF 상태를 확인한다.


<예> C:\>COPY CON EDIT2.bat
  ECHO OFF
                 이후에 실행되는 명령어는 화면에 나타나지 않는다.
                 화면에 ECHO OFF 자체는 나타난다.

  TB
                 태백한글을 메모리에 상주 띄우기.
                 각자 지원되는 다른 한글코드(HANME,HT,DKBY 등)를
                 실행하면 된다.
                 한글도스인 때는 HBIOS.COM을 실행한다.

  PAUSE
               잠시 중지. 엔터하면 다시 진행한다.

  CLS
              화면청소

  ECHO 'This is Hangul Edit.'
                            '문자열'을 화면에 출력한다.

  PAUSE
  REM NOW,DOS EDIT IS HANGUL EDITOR.

                REM 다음에 오는 설명은 화면에 나오지 않는다. 다만
                사용자가 배치파일 내용을 볼 때 참고할 내용이다.

  ECHO ON
              이후에 실행되는 명령어는 화면에 나타남

  EDIT
              도스 에디터 화면이 나오면 한글로 문서를 작성.저장한
              후 끝낸다.

  @ECHO OFF

             이후에 실행되는 명령어는 화면에 나타나지 않는다.
             ECHO OFF자체도 나타나지않음.

  TB/U
            태백한글 메모리서 제거한다.

  CLS
  ^Z
           CTRL+Z 또는 F6를 누른다.

  1 File(s) Copied

  실습을 위하여 일부러 여러가지 명령 종류를 써 보았으며,한글로 설 명을 하느라고 줄이 떨어졌으나 각자 실습할 때는 영문글자 부분만 쓰고 엔터하여 줄울 바꾸고 줄간격을 붙여가며 쓴다.

<실행 예>  C:\>EDIT2 <엔터> 하면

위의 내용을 순서데로 실행하고 도스 문서편집기가 화면에 나타난다. 문서작성기를 끝내면 한글프로그램을 메모리에서 제거하고 도스로 나온다.  (계속)


제14장 배치파일 #2 (계속)

1.4 배치파일 전용 명령에서
? 판단과 분기에 관한 명령  ....  CALL, CHOICE, IF, GOTO

앞에서 공부한 배치파일의 경우는 입력된 명령어들의 순서데로 실행되었었지만, 판단과 분기의 명령들은 명령어의 실행의 흐름을 사용자가 임의로 변경,지정할 수있어 배치파일의 기능을 보다 강력하게 한다.

분기 명령..배치파일의 순차적 수행을 필요에 따라 변경할 때 사용하며
          배치파일에 프로그램적 기능을 갖게하는 명령이다.

조건분기(Conditional Branching).......IF명령

무조건분기(Unconditional Branching)...GOTO명령

① CALL [배치파일 인자]

배치파일 실행 중 다른 배치파일을 도중에 호출하여 실행시키고 다시
원래 배치파일로 돌아오게 하는 명령이다.

<예>  H1.BAT의 내용이 'DIR C:\ > A:MDIRLIST.TXT' ( C루트의 파일목
록을 A드라이브에 MDIRLIST.TXT 란 파일로 출력하라) 이라고 하자.

  C:\>COPY CON H2.BAT
    CALL H1.BAT
    TYPE A:MDIRLIST
    ^Z

<실행> C:\>H2 엔터하면 H1.BAT란 배치파일을 불러(CALL) 실행하여 MDIRLIST.TXT 파일을 A드라이브에 만든 후, 다시 H2.BAT 파일로 돌아와서 A드라이브의 'MDIRLIST.TXT' 파일을 화면에 타이프해 보인다.


②  IF 조건

주어진 조건에 따라 명령을 선별적으로 선택.실행케 하는 명령이다.

IF EXIST [파일이름] [명령]
         찾는 파일이 존재하면 명령을 실행하라

IF NOT EXIT [파일이름] [명령]
         찾는 파일이 없으면 명령을 실행하라

<예> IF EXIST *.BAK DEL *.BAK
       BAK라는 백업파일이 있으면 모두 지워버리라.


IF [NOT] "문자열1" == "문자열2" [명령]
    "문자열1"과 "문자열2"가 서로 일치 [불일치] 하면 명령을 실행하라.                     (양쪽 비교 문자열의 영문 대소문자를 구분한다)
    ==은 EQ로, !=은 같지 않다는 부호인데 NE로 대신할 수 있다.
  문자열은 " " 으로 반드시 구분하고 부호와는 한 칸 띈다.

<예> C:\>COPY CON TEST1.BAT
    @ECHO OFF
    IF "%1" == "A" ECHO TESTING A
    IF NOT "%1" == "A" ECHO IT IS NOT EQUAL.
    ^z

<실행> C:\>TEST1 A 엔터하면 화면에 TESTING A 라고 표시한다.
      C:\>TEST1 C 엔터하면 A와 같지 않으므로 IT IS NOT EQUAL 라고 표시한다.

IF [NOT] ERRORLEVEL [값] [명령]
     IF명령 바로 앞에서 수행되었던 프로그램이 수행을 마치면서 남긴 종료코드(ExitCode)를 검사하여 지정 값보다 크면(작으면) 명령을 실행하라는 뜻이다.

종료코드를 발생하는 명령어(FORMAT,XCOPY,COPY,BACKUP,RESTORE 등 일
반 도스명령어들 메뉴얼 참조)들은 0~255 범위에서 종료코드(EXITCODE)
값을 가지는데
에를 들면 XCOPY명령에서 성공적 수행일 때는 0, 화일이 없을 때 1, CTRL+C로 중단하면 2, 초기화 오류발생 때는 4, 디스크 에러에는 5를 반환하는 식으로 정해저 있다.

예>  C:\>COPY CON XY.BAT
        XCOPY %1 A:
        IF NOT ERRORLEEVEL 0 ECHO COPY FAILED !
        IF ERRORLEVEL 0 ECHO SUCCESSFULLY !
        ^Z

실행> C:\>XY *.* 엔터하면 성공적 수행여부에 따라  'FAILED !' 또는
                         'SUCCESSFULLY !' 라는 메시지가 나온다.

③ GOTO [레이블이름]
  레이블 이름이 있는 행으로 실행 순서를 옮긴다.
  '레이블(Label)'은 8자이 내로, 레이블 앞에는 콜론(:)을 사용한다.

<예> 현재 디렉토리에 *.HWP 파일을 C:\HNCDOC 디렉토리로 옮겨주는
     배치파일을 만들어 보자.

  C:\>COPY CON HWPMV.BAT
      @ECHO OFF
      IF NOT EXIST *.HWP GOTO FIRST
      MOVE /-Y *.HWP C:\HNCDOC
      ECHO HWPFILE MOVE DONE !
      GOTO END
      :FIRST
      ECHO *.HWP FILE NOT FOUND !
      :END
      ^Z

실행> C:\>HWPMV  엔터하면 C루트 디렉토리에 있는 모든 HWP 파일을 C:\HNCDOC 디렉토리로 옮기고 'HWP 파일을 모두 옮겼다'는 메시지를 화면에 보이고 END(끝) 레이블로 와서 도스상태로 빠저나 온다. 옮길 HWP 파일이 없으면 ' HWP 파일을 찾지 못했다'는 메시지가 나오고 끝(END) 낸다.

     GOTO 문에서는 항상 END 레이블로 배치를 끝낸다.

  배치 안에서 COPY,XCOPY,MOVE 명령은 /-Y 스위치를 써야 만이 목적지에 같은 이름의 파일이 있을 경우 덮어 쓸지여부를 확인하는 메시지를 출력한다.

④ 의사변수(Dummy Variables 가상의 변수)

바꿔 쓸 수 있는 인자(Replaceable Parameter)를 의사변수라 하며,
  %0 ~ %9(10개)으로 표시한다.

형식> C:\>명령어 파일1 파일2   "    "   "   "   "   " 파일9
           %0    %1    %2    %3   %4  %5  %6  %7  %8  %9

작성예1> C:\>COPY CON DIRALL.BAT
           DIR %1
           pause
           DIR %2
           pause
           type %0
           ^Z

실행예> C:\>DIRALL A: B: (엔터)

설명> 위 '실행 예'에서 명령어 DIRALL(.BAT)은 %0, A:은 %1, B:은 %2 에 해당하므로 '작성예1'의 내용 중 %1,%2,%0에 대입하여 명령을 수행한 결과가 화면에 나오게 된다. 즉 화면에는 'DIR A:'과, 'DIR B:'이 차례로 출력되고 멈췄다가 'DIRALL.BAT' 파일 내용이 출력된다.


작성예2> C:\>COPY CON EDIT2.BAT
             @ECHO OFF
             CLS
             TB          .....tb라는 프로그램을 메모리에 설치
             EDIT %1     ......%1은 '지정 파일'로 대체된다.
             TB/U        .......태백 한글을 메모리에서 제거
             ^Z

실행예> C:\>EDIT2 SAMPLE.TXT (엔터)
             %0    %1

설명> 위 '실행예'에서 명령어(EDIT2.BAT)는 %0, 파일1(SAMPLE.TXT)은 %1 에 해당하므로, '작성예2'의 배치파일 내용중 %1 대신에 SAMPLE.TXT라는 텍스트 파일이 대입된다.

화면은 한글을 읽고 쓸 수 있도록 태백한글을 메모리에 상주시킨다. 편집기는 SAMPLE.TXT 라는 파일을 읽어 화면에 띄워 수정.삽입 등 편집하고 저장할 수 있다. 편집을 끝내면 한글코드가 메모리에서 제거된다.


⑤ SHIFT

쉬프트는 옮김,변위를 의미하는 데 10개 이상의 대체 인자(Replaceable
Paramete)도 사용 가능하다. 대체인자를 한 자리씩 왼쪽으로 이동한다.

작성예> 지정한 문장(text) 파일들을 차례로 TYPE시키는 배치파일 예.

A:\>COPY CON TELLME.BAT
    @ECHO OFF
    :BEGIN
    IF NOT EXIST %1 GOTO END
    TYPE %1
    SHIFT
    GOTO BEGIN
    :END
    ECHO 더이상 파일이 없습니다.
    ^Z

실행예> A:\>TELLME AAA.TXT BBB.TXT CCC.TXT .........   엔터
           %0     %1       %2      %3     ........%15

설명> 위 '실행예'의 텍스트 파일명은 특정해야 하며 Wildcard문자(*,?)는 사용할 수 없다. 지정된 여러 파일들에 %1 변수가 차례로 SHIFT(변위)되면서 파일을 대입시켜 내용을 출력한다.
즉 AAA.TXT가 먼저 %1이 되고, 다음 BBB.TXT, 또 CCC.TXT, .....등이 %1에 대입된다. 계속 10개 이상의 변수도 지정할 수 있다.

지정된 파일이 모두 옮겨 대입되고 나면 배치파일이 끝나게 된다. 배치파일 내용 중 GOTO 명령에서 BEGIN 레이블로 가서 다시 시작하게하는 것을 LOOP(고리)라고 한다.


⑥ FOR
FOR 명령은 지정된 횟수 만큼 배치파일이 같은 명령을 계속 반복하게하는 명령, 즉 반복수행 (Looping) 명령이다.

형식)  FOR %%변수 IN (셋트 파라미터) DO [명령어] %%변수

     '(셋트 파라미터)'는 일련의 많은 갯수의 파일들을 말하고, '%%변수'는 SET에 명시된 각 파일에 순차적으로 설정되어 명령을 실행하는 대입변수이다.

     셋트 파라미터에 와일드카드문자(*,?)를  사용할 수 있다.

작성예> 확장명이 BAT,DOC,TXT,CAP인 문장 파일 모두를 차례로 화면에 출력(TYPE)되게 배치파일을 만들어 보자.

  C:\> COPY CON TYPEALL.BAT
       FOR %%Z IN (*.BAT *.DOC *.TXT *.CAP) DO TYPE %%Z
       ^Z

<실행>  C:\>TYPEALL C:\MDIR\*.BAT 엔터

  (*.BAT,  *.DOC,  *.TXT,  *.CAP 중에서 한 종류 파일만 지정한다.)

위 TYPEALL.BAT 파일을 실행할 때는 파일스펙(경로특정)이 있어야 한다.


2. 자동형 배치파일 (Aautoexec.bat)

일반배치파일 만들기와 동일하며 다만 이름만 AUTOEXEC.BAT로 한다.

컴퓨터를 구입할 때 이미 작성되어 있으므로 그 내용만 자기 필요에 따라 변경하면 될 것이다. 만약을 위해 원본 파일을 다른 곳에 백업해 놓고 필요시 다시 복사하면 좋을 것이다.

<작성예>  C:\>COPY CON AUTOEXEC.BAT
         @ECHO OFF
         CLS
         SMARTDRV
         LH V3RES
         PROMPT $P$G
         PATH=C:\;C:\DOS;C:\MDIR;C:\V&P
         LH DOSKEY
         M
         ^Z
         1 FIle(s) Copied

①  컴퓨터가 부팅할 때 DOS 시스템 프로그램을 메모리에 상주시킨 후
  곧 바로 자동실행 배치파일의 내용의 명령들을 실행한다.


아래 링크 출처 --  http://naver.com/mokomoji

배치화일로 파일 내에 문자쓰기
http://blog.naver.com/mokomoji/130001367333

배치파일로 폴더 내의 여러 파일을 각각 압축하기
http://blog.naver.com/mokomoji/130001367394

배치화일 수동 초이스 만들기 
http://blog.naver.com/mokomoji/130001367431

html 배치화일 특수문자 해결
http://blog.naver.com/mokomoji/130001367445

배치화일 명령어
http://blog.naver.com/mokomoji/130001367473

[본문스크랩] 네트워크 드라이브 자동 연결하기
http://blog.naver.com/mokomoji/130003167299

[본문스크랩] IP 자동 변경 스크립트
http://blog.naver.com/mokomoji/130003167289

[본문스크랩] 반복적인 ip 변경은 Bat 파일을 이용하여 간단하게
http://blog.naver.com/mokomoji/130003167083

[펌] 윈도우 콘솔 명령어들
http://blog.naver.com/mokomoji/130001368352

배치파일로 폴더 내의 여러 파일을 각각 압축하기
http://blog.naver.com/mokomoji/130001367394

폴더 분기
http://blog.naver.com/mokomoji/120019472999

[펌] 날짜 및 시간 얻어오기 배치파일
http://blog.naver.com/mokomoji/120016354197

배치화일 오늘날짜 폴더 생성
http://blog.naver.com/mokomoji/120014798527

배치화일 bat 화일 자동처리 1
http://blog.naver.com/mokomoji/120014798176

2006/12/18 12:31 2006/12/18 12:31
이 글에는 트랙백을 보낼 수 없습니다


질문 패턴 01. 영화 보러 갈래?
Do you want to see a movie tonight?
이걸 원해? 말만 해! 다 해 줄 테니~ 상대방의 의향을 물을 땐, Do you~?

질문 패턴 02. 조용히 좀 해 줄래?
Can you keep it down?
밥 좀 사줄래? 청소 좀 도와줄래? 어려운 일을 부탁할 땐, Can you~?

질문 패턴 03. 얘기 좀 해도 될까?
Can I talk to you?
그것 좀 해도 돼? 상대방의 허락을 구하거나 부탁할 일이 있을 땐, Can I~?

질문 패턴 04. 여기 사인해 주시겠어요?
Would you signature here, please?
점잖고 격조 있고 교양 있게 말하고 싶을 땐, Would you~?

질문 패턴 05. 진심이야?
Are you serious?
행복하다고? 긴장된다고? 상대방의 상태를 묻고 싶다면, Are you~?

질문 패턴 06. 내가 먼저 전화해야 하나?
Should I call him first?
제가 어찌 하오리까? 무언가 해야 하냐고 나의 의무를 물을 땐, Should I~?

질문 패턴 07. 그녀에게 데이트 신청할 작정이야?
Are you going to ask her out?
뭔가 할 예정이라고 이미 마음먹은 일을 통보할 땐, Are you going to~?

질문 패턴 08. 전화해도 돼요?
Is it okay if I call you?
무엇이든 괜찮은지 아닌지 묻고 싶을 땐, Is it okay if~?

질문 패턴 09. 인터넷으로 주문하지 그래?
Why don't you order it online?
내 이름은 권해요! 상대방에게 무언가 권유할 땐, Why don't you~?

질문 패턴 10. 근처에 화장실이 있나요?
Is there a bathroom around here?
어이, 거기 누구 없소? Is there~?

질문 패턴 11. 누굴 사랑해 본 적 있어요?
Have you ever loved someone?
해봤어? 먹어봤어? 가봤어? 경험을 물어볼 땐, Have you~?

질문 패턴 12. 좀 도와줘?
You need some help?
평서문으로도 물어볼 수 있다? 상대방에게 물어보고 싶은 것이 있을 땐 무조건 You~?

질문 패턴 13. 그렇게 생각 안 해?
Don't you think so?
넌 안 그러니? 상대방의 동의를 구하고 싶을 땐, Don't you~?

질문 패턴 14. 저한테 메시지 온 거 있어요?
Any messages for me?
무언가 있는지 물어볼 때 Any~?를 써도 된다고?

질문 패턴 15. 무슨 일 있어?
What happened to you?
뭘 했는지, 뭘 좋아하는지. ‘무엇’이 들어가는 질문을 할 땐 무조건, What~?

질문 패턴 16. 너희 둘은 어떻게 만나게 되었는데?
How did you two meet?
‘어떻게’라는 말이 들어가는 표현을 할 땐 무조건, How~?

질문 패턴 17. 오늘 언제 퇴근해요?
When do you get off today?
시간에 관한 질문을 할 땐 언제나, When~?

질문 패턴 18. 어디 가고 싶어?
Where do you want to go?
어디 가고 싶다고? 어디 있는 거야? ‘어디’가 들어가는 질문을 할 땐, Where~?

질문 패턴 19. 누가 이랬어?
Who did this?
‘누가’ 했는지 묻고 싶을 땐 무조건, Who~?

질문 패턴 20. 왜 나한테 키스했어?
Why did you kiss me?
왜 그랬는데? 도대체 왜 그랬어? 이유를 묻고 싶을 땐 언제나, Why~?

2006/12/18 12:25 2006/12/18 12:25
이 글에는 트랙백을 보낼 수 없습니다

EXPLAIN 사용함으로써 인덱스가 적절히 사용되고 있는지 검토할 있다. 인덱스가 잘못 사용되고 있다면 ANALYZE TABLE 사용하여 테이블을 점검하라.
이것은 테이블의 상태를 갱신하며 옵티마이저의 동작에 영향을 준다.

옵티마이저가 SELECT 기록된 순서대로 조인을 행하게 강제하려면 SELECT 대신에 SELECT STRAIGHT_JOIN 사용하라.

EXPLAIN SELECT 문에 사용된 테이블당 하나의 행을 리턴한다. 나열된 순서는 MYSQL 쿼리처리에 사용하는 순서대로 출력된다.

MYSQL 모든 조인을 single-sweep multi-join 방식을 사용하여 해결한다. 이것은 MYSQL 첫번째 테이블에서 한행을 읽고, 두번째 테이블에서 매치되는 행을 찾고, 세번째 테이블에서 매치되는 행을 찾고.. 그러한 방식이다. 모든 테이블들이 처리된 추출된 컬럼을 출력하고 다시 처음 테이블로 돌아가서 조인을 계속한다. 이런식으로 첫번째 테이블에 더이상 남는행이 없을때까지 실행한다.

(어느것이 첫번째 테이블이 될지는 mysql 옵티마이저가 결정할 문제이다. STRAIGHT_JOIN 명시하지 않았다면 유저가 입력한 순서와는 관련이 없다.)

MYSQL 4.1 버전에서 EXPLAIN 출력포멧이 UNION subquery, derived table 다루기에 효과적으로 변경되었다. 무엇보다 중요한 것은 id , select_type 컬럼이 추가된 것이다.

EXPLAIN 행은 하나의 테이블에 대한 정보를 보여주며 다음과 같은 컬럼들로 구성된다.

  • id

SELECT 번호, 쿼리내의 SELECT 구분번호이다.

  • select_type

SELECT 타입, 다음과 같다.

    • SIMPLE

단순 SELECT (UNION 이나 서브쿼리를 사용하지 않음)

    • PRIMARY

가장 외곽의 SELECT

    • UNION

UNION 에서의 두번째 혹은 나중에 따라오는 SELECT

    • DEPENDENT UNION

UNION 에서의 두번째 혹은 나중에 따라오는 SELECT, 외곽쿼리에 의존적이다.

    • UNION RESULT

UNION 결과물.

    • SUBQUERY

서브쿼리의 첫번째 SELECT

    • DEPENDENT SUBQUERY

서브쿼리의 첫번째 SELECT, 외곽쿼리에 의존적이다.

    • DERIVED

SELECT 추출된 테이블 (FROM 내부의 서브쿼리)

  • table

나타난 결과가 참조하는 테이블명.

  • type

조인타입, 아래와 같다. 우수한 순서대로 뒤로갈수록 나쁜 조인형태이다.

    • system

테이블에 하나의 행만 존재(시스템 테이블). const join 특수한 경우이다.

    • const

많아야 하나의 매치되는 행만 존재하는 경우. 하나의 행이기 때문에 컬럼값은 나머지 연산에서 상수로 간주되며, 처음 한번만 읽어들이면 되기 때문에 무지 빠르다.
PRIMARY KEY
UNIQUE index 상수와 비교하는 경우.
아래의 경우에서 tbl_name const table 조인된다.

SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM
tbl_name
WHERE
primary_key_part1=1 AND primary_key_part2=2;

    • eq_ref

조인수행을 위해 테이블에서 하나씩의 행만이 읽혀지는 형태. const 타입이외에 가장 훌륭한 조인타입니다.
조인연산에 PRIMARY KEY UNIQUE index 인덱스가 사용되는 경우.
인덱스된 컬럼이 = 연산에 사용되는 경우. 비교되는 값은 상수이거나 이전조인결과의 컬럼값일수 있다.
다음 예에서 MySQL ref_table 처리하는데 eq_ref 조인을 사용한다.

SELECT * FROM
ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1= other_table.column
AND ref_table.key_column_part2=1;

    • ref

이전 테이블과의 조인에 사용될 매치되는 인덱스의 모든행이 테이블에서 읽혀진다. leftmost prefix 키만을 사용하거나 사용된 키가 PRIMARY KEY UNIQUE 아닐때( 키값으로 단일행을 추출할수 없을때) 사용되는 조인.
만약 사용된 키가 적은수의 행과 매치될때 이것은 적절한 조인 타입니다.
ref
인덱스된 컬럼과 = 연산에서 사용된다.
아래 예에서 MySQL ref_table 처리에 ref 조인 타입을 사용한다.

SELECT * FROM
ref_table WHERE key_column=expr;
SELECT * FROM
ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1= other_table.column
AND ref_table.key_column_part2=1;

    • ref_or_null

ref 같지만 NULL 값을 포함하는 행에대한 검색이 수반된다.
4.1.1
에서 새롭게 도입된 조인타입이며 서브쿼리 처리에서 대개 사용된다.
아래 예에서 MySQL ref_table 처리에 ref_or_null 조인타입을 사용한다.

SELECT * FROM ref_tableWHERE key_column=expr OR key_column IS NULL;

See Section 7.2.7, “How MySQL Optimizes IS NULL.

    • index_merge

인덱스 병합 최적화가 적용되는 조인 타입.
경우, key 컬럼은 사용된 인덱스의 리스트를 나타내며 key_len 컬럼은 사용된 인덱스중 가장 key 명을 나타낸다.
For more information, see
Section 7.2.6, “Index Merge Optimization”.

    • unique_subquery

이것은 아래와 같은 몇몇 IN 서브쿼리 처리에서 ref 타입대신 사용된다.

value
IN (SELECT primary_key FROM single_table WHERE some_expr)

unique_subquery 는 성능향상을 위해 서브쿼리를 단순 index 검색 함수로 대체한다.

    • index_subquery

unique_subquery 마찬가지로 IN 서브쿼리를 대체한다. 그러나 이것은 아래와 같이 서브쿼리에서 non-unique 인덱스가 사용될때 동작한다.

value
IN (SELECT key_column FROM single_table WHERE some_expr)

    • range

인덱스를 사용하여 주어진 범위 내의 행들만 추출된다. key 컬럼은 사용된 인덱스를 나타내고 key_len 사용된 가장 key 부분을 나타낸다.
ref
컬럼은 타입의 조인에서 NULL 이다.
range
타입은 컬럼이 상수와 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN 또는 IN 연산에 사용될때 적용된다.

SELECT * FROM tbl_nameWHERE key_column = 10;SELECT * FROM tbl_nameWHERE key_column BETWEEN 10 and 20;SELECT * FROM tbl_nameWHERE key_column IN (10,20,30);SELECT * FROM tbl_nameWHERE key_part1= 10 AND key_part2 IN (10,20,30);

    • index

타입은 인덱스가 스캔된다는걸 제외하면 ALL 같다. 일반적으로 인덱스 파일이 데이타파일보다 작기 때문에 ALL 보다는 빠르다.
MySQL
쿼리에서 단일 인덱스의 일부분인 컬럼을 사용할때 조인타입을 적용한다.

    • ALL

테이블과의 조인을 위해 풀스캔이 된다. 만약 (조인에 쓰인) 첫번째 테이블이 고정이 아니라면 비효율적이다, 그리고 대부분의 경우에 아주 느린 성능을 보인다. 보통 상수값이나 상수인 컬럼값으로 row 추출하도록 인덱스를 추가함으로써 ALL 타입을 피할 있다.

  • possible_keys

컬럼값은 MySQL 해당 테이블의 검색에 사용할수 있는 인덱스들을 나타낸다.
주의할것은 explain 결과에서 나타난 테이블들의 순서와는 무관하다는 것이다.
이것은 possible_keys 나타난 인덱스들이 결과에 나타난 테이블 순서에서 실제 사용할 없을수도 있다는 것을 의미한다.
이값이 NULL 이라면 사용가능한 인덱스가 없다는 것이다. 이러한 경우에는 인덱스를 where 절을 고려하여 사용됨직한 적절한 컬럼에 인덱스를 추가함으로써 성능을 개선할 있다. 인덱스를 수정하였다면 다시한번 EXPLAIN 실행하여 체크하라.
See
Section 13.2.2, “ALTER TABLE Syntax”.

현재 테이블의 인덱스를 보기 위해서는 SHOW INDEX FROM tbl_name. 사용하라.

  • key

컬럼은 MySQL 실제 사용한 key(index) 나타낸다.
만약 사용한 인덱스가 없다면 NULL 값일 것이다. MySQL possible_keys 나타난 인덱스를 사용하거나 사용하지 않도록 강제하려면 FORCE INDEX, USE INDEX, 혹은 IGNORE INDEX 함께 사용하라.
See
Section 13.1.7, “SELECT Syntax”.

MyISAM BDB 테이블에서는 ANALYZE TABLE 옵티마이저가 더나은 인덱스를 선택할 있도록 테이블의 정보를 갱신한다.
MyISAM 에서는 myisamchk --analyze 같은 기능을 한다.
See
Section 13.5.2.1, “ANALYZE TABLE Syntax” and Section 5.7.2, “Table Maintenance and Crash Recovery”.

  • key_len

컬럼은 MySQL 사용한 인덱스의 길이를 나타낸다. key 컬럼값이 NULL 이면 이값도 NULL 이다.
key_len
값으로 MySQL 실제 복수컬럼 키중 얼마나 많은 부분을 사용할 것인지 있다.

  • ref

컬럼은 행을 추출하는데 키와 함께 사용된 컬럼이나 상수값을 나타낸다.

  • rows

값은 쿼리 수행에서 MySQL 예상하는 검색해야할 행수를 나타낸다.

  • Extra

컬럼은 MySQL 쿼리를 해석한 추가적인 정보를 나타낸다.
아래와 같은 값들이 나타날 있다.

    • Distinct

MySQL 매치되는 첫행을 찾는 즉시 검색을 중단할 것이다.

    • Not exists

MySQL LEFT JOIN 수행함에 매치되는 행을 찾으면 더이상 매치되는 행을 검색하지 않는다.
아래와 같은 경우에 해당한다.

SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.idWHERE t2.id IS NULL;

여 기서 t2.id NOT NULL 이고, 이경우 MySQL t1 을 스캔한 후 t1.id 값을 사용해 t2 를 검색한다. MySQL t2 에서 매치되는 행을 찾으면 t2.id NULL 이 될 수 없으므로 더이상 진행하지 않는다. , t1 의 각 행에 대해 t2 에서 매치되는 행이 몇개가 있던지 한개만 찾으면 된다.

    • range checked for each record (index map: #)

MySQL 사용할 좋은 인덱스가 없다. 그러나 선행된 테이블의 컬럼값에 따라 몇몇 인덱스를 사용할 있다. 선행된 테이블의 개개 행에 대해 MySQL range index_merge 접근법을 사용할 있는지 체크할 것이다.
적용가능성의 핵심은 Section 7.2.5, “Range Optimization” and Section 7.2.6, “Index Merge Optimization” 모든 선행된 테이블의 값이 명확하거나 상수인 때를 예외로 하여 기술되어 있다.
이것은 그리 빠르진 않으나 인덱스가 없는 조인의 경우보다는 빠르다.

    • Using filesort

MySQL 정렬을 위해 추가적인 과정을 필요로한다. 정렬과정은 조인타입에 따라 모든 행을 검색하고 WHERE 절에 의해 매치된 모든 행들의 키값을 저장한다. 그리고 저장된 키값을 정렬하여 재정렬된 순서로 행들을 추출한다.
See
Section 7.2.10, “How MySQL Optimizes ORDER BY.

    • Using index

컬럼정보가 실제 테이블이 아닌 인덱스트리에서 추출된다. 쿼리에서 단일 인덱스된 컬럼들만을 사용하는 경우이다.

    • Using temporary
      MySQL 결과의 재사용을 위해 임시테이블을 사용한다. 쿼리 내에 GROUP BY ORDER BY 절이 각기 다른 컬럼을 사용할때 발생한다.

    • Using where
      WHERE 절이 다음 조인에 사용될 행이나 클라이언트에게 돌려질 행을 제한하는 경우이다. 테이블의 모든 행을 검사할 의도가 아니라면 Extra 값이 Using where 아니고 조인타입이 ALL 이나 index 라면 쿼리사용이 잘못되었다.
    • 쿼리를 가능한 빠르게 하려면, Extra 값의 Using filesort Using temporary 주의해야 한다.
    • Using sort_union(...) , Using union(...) , Using intersect(...)
      이들은 인덱스 병합 조인타입에서 인덱스 스캔이 병합되는 형태를 말한다.

See Section 7.2.6, “Index Merge Optimization” for more information.

    • Using index for group-by

이블 접근방식은 Using index 같다. MySQL 실제 테이블에 대한 어떠한 추가적인 디스크 접근 없이 GROUP BY DICTINCT 쿼리에 사용된 모든 컬럼에 대한 인덱스를 찾았음을 말한다. 추가적으로 각각의 group 단지 몇개의 인덱스 항목만이 읽혀지도록 가장 효율적인 방식으로 인덱스가 사용될 것이다.
For details, see
Section 7.2.11, “How MySQL Optimizes GROUP BY.

EXPLAIN 출력내용중 rows 컬럼값들을 곱해봄으로써 얼마나 효과적인 join 실행하고 있는지 있다. 값은 MySQL 쿼리수행중 검사해야할 행수를 대략적으로 알려준다. 만약 max_join_size 시스템 변수값을 설정하였다면 값은 또한 여러테이블을 사용하는 select 어느것을 먼저 실행할지 판단하는데 사용된다.
See
Section 7.5.2, “Tuning Server Parameters”.

다음 예는 다중테이블 조인이 EXPLAIN 정보를 통해 점차적으로 개선되는 과정을 보여준다. 만약 아래와 같은 select 문을 EXPLAIN 으로 개선한다면 :

EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,            tt.ProjectReference, tt.EstimatedShipDate,            tt.ActualShipDate, tt.ClientID,            tt.ServiceCodes, tt.RepetitiveID,            tt.CurrentProcess, tt.CurrentDPPerson,            tt.RecordVolume, tt.DPPrinted, et.COUNTRY,            et_1.COUNTRY, do.CUSTNAME        FROM tt, et, et AS et_1, do        WHERE tt.SubmitTime IS NULL            AND tt.ActualPC = et.EMPLOYID            AND tt.AssignedPC = et_1.EMPLOYID            AND tt.ClientID = do.CUSTNMBR;

예에서 아래와 같은 가정이 사용되었다.:

  • The columns being compared have been declared as follows:

Table

Column

Column Type

tt

ActualPC

CHAR(10)

tt

AssignedPC

CHAR(10)

tt

ClientID

CHAR(10)

et

EMPLOYID

CHAR(15)

do

CUSTNMBR

CHAR(15)

  • The tables have the following indexes:

Table

Index

tt

ActualPC

tt

AssignedPC

tt

ClientID

et

EMPLOYID (primary key)

do

CUSTNMBR (primary key)

  • The tt.ActualPC values are not evenly distributed.

먼저, 개선되기 전의 EXPLAIN 다음과 같은 정보를 보여준다.:

table type possible_keys key  key_len ref  rows  Extraet    ALL  PRIMARY       NULL NULL    NULL 74do    ALL  PRIMARY       NULL NULL    NULL 2135et_1  ALL  PRIMARY       NULL NULL    NULL 74tt    ALL  AssignedPC,   NULL NULL    NULL 3872           ClientID,           ActualPC      range checked for each record (key map: 35)


각 테이블의 type ALL 을 나타내므로, MySQL 이 모든 테이블의 카티션곱(Cartesian product) 를 생성한다는 것을 나타낸다.
각 테이블의 행의 조합이 모두 검사되어야 하기 때문에 이것은 아주 오랜 시간이 소요될 것이다.

실제로 결과는 74 * 2135 * 74 * 3872 = 45,268,558,720 행에 달한다.
만약 테이블이 크다면 얼마나 소요될지 상상할 수도 없을 것이다.
여기서 우선적인 문제는 MySQL 같은 타입으로 선언된 컬럼의 인덱스를 효과적으로 사용할 있다는 것이다. (ISAM 테이블에서는 같은 타입으로 선언되지 않은 인덱스는 사용할 없다.) 여기에서 VARCHAR CHAR 길이가 다르지 않다면 같은 타입이다.
tt.ActualPC
CHAR(10) 이고 et.EMPLOYID CHAR(15) 선언되어 있으므로 길이의 불일치가 발생한다.

이러한 컬럼 길이의 불일치 문제의 해결을 위해 ALTER TABLE 사용하여 ActualPC 컬럼을 10 글자에서 15 글자로 변경하자 (길이를 늘리는것은 데이타 손실이 없다.)

mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);

이제 tt.ActualPC et.EMPLYID 는 모두 VARCHAR(15) 이다. 다시 EXPLAIN 을 실행해보면 다음 결과와 같다.

table type   possible_keys key     key_len ref         rows    Extratt    ALL    AssignedPC,   NULL    NULL    NULL       3872    Using             ClientID,                                         where             ActualPCdo    ALL    PRIMARY       NULL    NULL    NULL        2135      range checked for each record (key map: 1)et_1  ALL    PRIMARY       NULL    NULL    NULL        74      range checked for each record (key map: 1)et    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC 1

훨씬 좋아졌지만 아직 완벽하지 않다. 행의 곱은 이제 74 만큼 줄었다.

쿼리는 이제 몇초만에 실행될 것이다.

두번째 작업은 tt.AssignedPC = et_1.EMPLYID tt.ClientID = do.CUSTNMBR 에서의 컬럼길이의 불일치를 수정하는 것이다.

mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),    ->                MODIFY ClientID   VARCHAR(15);

이제 EXPLAIN 다음과 같은 결과를 보여준다.

table type   possible_keys key      key_len ref           rows Extraet    ALL    PRIMARY       NULL     NULL    NULL          74tt    ref    AssignedPC,   ActualPC 15      et.EMPLOYID   52   Using             ClientID,                                         where             ActualPCet_1  eq_ref PRIMARY       PRIMARY  15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY  15      tt.ClientID   1

이것은 이제 거의 최적의 결과가 같다.

남아있는 문제는 MySQL 기본으로 tt.ActualPC 컬럼의 값이 균등하게 분포되어 있다고 가정한다는 것이다. 하지만 tt 테이블은 실제로 그렇지 않다.

다행히도 MySQL 분포를 검사하도록 하는것은 매우 쉽다.

mysql> ANALYZE TABLE tt;

이제 완벽한 조인이 되었다. EXPLAIN 결과는 다음과 같다.

table type   possible_keys key     key_len ref           rows Extratt    ALL    AssignedPC    NULL    NULL    NULL          3872 Using             ClientID,                                        where             ActualPCet    eq_ref PRIMARY       PRIMARY 15      tt.ActualPC   1et_1  eq_ref PRIMARY       PRIMARY 15      tt.AssignedPC 1do    eq_ref PRIMARY       PRIMARY 15      tt.ClientID   1

EXPLAIN 결과의 rows 컬럼값이 나타내는 MySQL 최적화에 의해 예측된 행수에 주목하라.

나타난 숫자가 실제 행수에 근접한지 체크해야 한다. 그렇지 않다면 STRAIGHT_JOIN 사용고 FROM 절에서 테이블의 순서를 변경함으로써 나은 성능을 얻을 있다.

2006/12/11 19:42 2006/12/11 19:42
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2006/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)