윈도우 일반

명령 프롬프트와 배치 파일에서 ASCII Code(아스키 코드) 사용하기

CApple 2012. 12. 2. 23:30
배치 파일과 아스키 코드


제가 작성한 배치 파일들을 보면 위와 같이 박스를 씌워 놓은 경우가 많습니다. 간혹 이것에 대해 물어보시는 분들이 계시더군요.


해당 박스는 아스키 코드(ASCII Code) 로 입력한 것입니다. 표준 아스키 코드는 0~127 총 128 개의 문자열로 이루어져 있습니다. 32~126 은 알파벳이나 숫자, 특수 문자와 같은 일반적인 문자(Graphic Characters, Letter)이고, 0~31, 127 은 인쇄 및 전송 제어용으로 사용되는 제어 문자(Control Characters)에 해당합니다. 제어 문자들은 원래 화면에 출력되는 글자가 아닌 Space, Delete, Cancel, Carriage return, Line feed, Backspace 등의 특정한 동작을 의미하는 것입니다.

그런데 이런 제어 문자들 중에 일부는 명령 프롬프트에서 특수 문자로 변경되어 출력이 됩니다. 위의 배치 파일에서 보이는 박스는 바로 그러한 제어 문자를 이용하여 만들었습니다. 아무튼, 이렇게 제어 문자를 통해 변형된 특수 문자로 박스를 만들면 (*한글 윈도우 환경을 기준으로) 일반적인 특수 문자를 사용한 박스보다 깔끔한 박스를 만들 수 있습니다. 그래서 저 외에도 많은 분들이 사용하고 계시는 걸 발견할 수 있습니다.


우선 명령 프롬프트에서 아스키 코드를 입력하는 방법은 매우 간단합니다. 키보드의 Alt 키를 누르고 있는 상태에서 입력을 원하는 아스키 코드의 10 진수 값을 입력한 후 Alt 키에서 손을 떼면 해당 아스키 코드에 해당하는 문자가 입력이 됩니다. 간단하죠? 예를 들어 대문자 A 는 10 진수를 기준으로 65 라는 코드값을 가지고 있습니다. 그래서 아스키 코드로 입력하려면 아래와 같이 하면 되는 것이죠.

Alt 키를 누르고 있음(Alt KeyDown) → 65 → Alt 키에서 손을 뗌(Alt KeyUp)



마찬가지의 방법으로 명령 프롬프트에서 제어 문자도 입력할 수 있습니다. 단! 제어 문자는 명령 프롬프트에서 입력하면 ^A 와 같이 [Ctrl + 키] 의 형식으로 출력이 됩니다. [^A = Ctrl+A, 이는 제어 문자는 "Ctrl + 키" 를 통해서도 입력할 수 있다는 의미, 단! 일부 "Ctrl + 키" 는 명령 프롬프트 자체에서 사용되는 기능키이기 때문에 "Alt + 코드" 를 통해서만 입력할 수 있는 제어 문자도 있음.] 그래서 그대로는 최종적으로 어떻게 출력되는지 확인할 수 없기 때문에 echo 명령 뒤에 입력하여 실행하는 식으로 확인하면 깔끔하게 확인할 수 있습니다. [사실 그냥 Enter 쳐도 되지만...]

예를 들어 10 진수 기준 1 에 해당하는 제어 문자는 아래와 같이 확인이 가능한 것이죠.

echo [Alt KeyDown→1→Alt KeyUp]

또는

echo [Ctrl + A]



이를 잘 조합하면 아래와 같이 선을 그려낼 수 있습니다.



간단하죠? 이제 이렇게 출력된 결과를 복사해서 메모장으로 가져오면 배치 파일을 짤 때 쉽게 사용할 수 있겠죠?

명령 프롬프트 화면에 출력된 내용을 복사하여 붙여넣기


참고로 윈도우 비스타 이상 사용자라면 echo 를 통해 아스키 코드 7 을 출력해보세요. (echo ^G) 그럼 띡~ 하는 소리가 날 겁니다. 배치 파일에서 소리 효과를 내는 것은 바로 이러한 아스키 코드 7 을 활용한 겁니다.


근데 일일히 확인하기 귀찮습니다. 그래서 제어 문자에 해당하는 아스키 코드를 제 나름대로 정리해 봤습니다. 해당 아스키 코드가 배치 파일에서 echo 를 통해 사용되면 최종적으로 명령 프롬프트에서 어떻게 출력되는지, 메모장으로 해당 배치 파일을 열어 보았을 때 메모장에서는 어떻게 표시되는지를 정리한 표입니다. [메모장이 명령 프롬프트에서의 출력과 가장 흡사하게 보여줍니다. * 굴림체 설정]

Dec abbr cmd echo Note Dec abbr cmd echo Note Dec abbr cmd echo Note
0 NUL ^@ x

12 FF ^L

24 CAN ^X

1 SOH ^A

13 CR ^M x 줄바꿈 25 EM ^Y

2 STX ^B

14 SO ^N

26 SUB ^Z x

3 ETX ^C

15 SI ^O

27 ESC ^[

4 EOT ^D

16 DLE ^P

28 FS ^\

5 ENQ ^E

17 DC1 ^Q

29 GS ^]

6 ACK ^F

18 DC2 ^R

30 RS ^^

7 BEL ^G 소리

19 DC3 ^S

31 US ^_

8 BS ^H 지우기

20 DC4 ^T

32 SP 공백 공백 공백
9 HT ^I x 21 NAK ^U

127 DEL ^?

10 LF ^J x

22 SYN ^V

11 VT ^K

23 ETB ^W

* x 사용할 수 없거나 Null 값으로 처리됨.
* ASCII Code 8 은 BackSpace 로 배치 파일에서 사용되면 의미 그대로 앞의 한 글자를 지웁니다.
* 명령 프롬프트의 Echo 출력 결과는 Color F0 으로 설정한 후 캡쳐한 것입니다.


아래는 제어 문자들이 배치 파일에서 Echo 로 사용되면 실제로 어떻게 출력되는지를 보여주는 배치 파일입니다. 메모장으로 열어보시면 메모장에서 어떻게 표시되는지를 알 수 있으며, 실행해보시면 명령 프롬프트에서는 어떻게 출력되는지를 아실 수 있습니다.


확인해보시고 필요한 문자를 복사 - 붙여넣기로 사용하시면 됩니다.


참고로 이것은 한글 윈도우의 기본값인 [명령 프롬프트 - 레스터 글꼴(Terminal)] 를 기준으로 한 것입니다. 영문 윈도우에서는 일부 제어 문자가 한글 윈도우와는 다르게 출력됩니다. [명령 프롬프트의 기본 폰트를 바꾼 경우에도 다르게 출력될 수 있습니다.] 특히나 박스를 꾸밀 때 사용되는 선 문자가 다르게 표시되죠.

그래서 제어 문자를 통해 박스를 구성한 경우 영문 윈도우에서는 깔끔한 선으로 이루어진 박스가 아닌 전혀 원치 않던 다른 특수 문자로 이루어진 박스가 출력됩니다. [한글이 깨지는 부분은 그냥 그러려니 하시고 박스 부분만 보세요.]

기본 폰트가 굴림체가 아닌 영문 윈도우에서는 일부 제어 문자가 다른 문자로 출력될 수 있다


그래서 배치 파일을 한글 윈도우는 물론 영문 윈도우와 같은 다른 언어의 윈도우에서도 사용할 예정이라면 이러한 제어 문자를 통해 생성한 특수 문자로 박스 등을 꾸미는 것은 자제하고, 기본 특수 문자를 통해서만 꾸며주는 것이 좋습니다.






배치 파일과 에디터

참고로 아래는 제 배치 파일 중 하나를 메모장으로 열어본 모습입니다.

메모장을 통해 본 ASCII Code

메모장은 명령 프롬프트와 거의 동일한 출력 모습을 보여주기 때문에 최종적으로 명령 프롬프트에서 어떻게 보일지 판단하기에 좋습니다. 아무튼 저는 그래서 echo 를 통해 화면에 출력되는 부분의 전체적인 틀을 잡을 때는 메모장을 애용합니다.


다음은 동일한 배치 파일을 Notepad++ 라는 에디터를 통해 열어본 모습입니다.

에디터를 통해 본 ASCII Code

Notepad++ 는 제어 문자의 경우 아스키 코드 자체를 출력해주기 때문에 위와 같이 사용된 아스키 코드를 바로 확인할 수 있는 장점이 있습니다. 또한 아스키 코드를 곧바로 입력할 수도 있습니다. [편집 -> Character Panel] 다만 아스키 코드 제어 문자를 통한 박스 등을 구성할 때는 echo 를 통해 출력되는 틀을 잡기에는 다소 어렵죠.


아무튼, 그래서 개인적으로 배치 파일을 짤 때는 [메모장, 굴림체] + [Notepad++, 나눔고딕코딩] 의 조합을 즐겨 사용합니다. 메인으로 (사실 거의 대부분) 메모장을 사용하고, 가끔씩 보조의 용도로 Notepad++ 을 사용하죠. Notepad2 도 많이 사용하시던데, 개인적으론 Notepad++ 이 저에겐 더 잘 맞더군요. 뭐 둘 모두 무료에 훌륭한 에디터니까요. 흠... 내가 이 이야기를 왜 하고 있지?

이번 글은 여기까지 입니다. ^^