배치 파일과 아스키 코드


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


해당 박스는 아스키 코드(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++ 이 저에겐 더 잘 맞더군요. 뭐 둘 모두 무료에 훌륭한 에디터니까요. 흠... 내가 이 이야기를 왜 하고 있지?

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

 

 

신고
캐플 블로그에 공개된 글은 반드시 원본 글의 링크를 포함시키는 조건으로 자유롭게 이용하실 수 있습니다.
하지만 블로그의 발전을 위하여 되도록이면 링크로 글을 소개해주시길 부탁드립니다. ^^

- 상업적인 용도의 사이트는 대상에서 제외됩니다. -
- 글에는 오류가 있을 수 있고, 추후 수정 또는 재발행될 수 있습니다. -
  1. BlogIcon mokomoji 2012.12.09 20:33 신고  댓글주소  수정/삭제  댓글쓰기
    참 힘들게 입력 하네..ㄱ-
    일단 유용 한거니 퍼가요...
    더 쉬운 방법도 있긴 한데...;; 삽질인 건 분명..;;;
    • BlogIcon CApple 2012.12.10 07:23 신고  댓글주소  수정/삭제
      본문에서 이야기한 것은 삽질인 게 맞습니다. 저렇게 어렵게 쓸 필요는 없죠. 그냥 이런 식으로 된다 설명한 겁니다. 글에서 제공한 배치 파일에 목록으로 정리해놨으니 거기서 복붙해서 쓰면 되겠죠. 노트패드 플러스처럼 에디터에서 쉽게 입력하는 것을 지원하는 경우도 있고요. 뭐 방법은 여러가지니까요. 그리고 더 쉬운 방법을 알고 계시면 댓글로 알려주시면 다른 분들께도 도움이 되겠죠?

      마지막으로 드리고 싶은 이야기가 있는데요. 댓글에선 예의를 지켜주세요. 혼잣말인지 상대에게 하는 말인지 댓글에선 알 수 없는 법이니까요. 제 블로그는 정확한 존대를 통해 상호 존칭해주는 것을 기본으로 합니다.

      p.s 다시 보니까 마지막에 출처와 링크 박스를 빼먹고 가져가셨네요. "츨처와 원본 링크가 존재한다면 반드시 함께 포함하여 가져가세요." 룰은 지켜주셨으면 합니다.
  2. BlogIcon mokomoji 2012.12.11 21:27 신고  댓글주소  수정/삭제  댓글쓰기
    원본 링크가 뭐임?
    출처에 에 링크 걸어두 면 되는 것 아님???????????????
    난 처음부터 써놨는뎅.. 게시물 맨끝에 보시면 달렸있음..~!!!!
    최소한 알량한 양심은 지킴..~(__~)


    출처: http://cappleblog.co.kr/515


    이라고 힘들게 써놨는데..ㄱ-)a
    • BlogIcon CApple 2012.12.12 02:18 신고  댓글주소  수정/삭제
      아~ 제가 그런 세세한 규칙에 좀 민감한 성격이라서요. ^^;;; 해당 박스에는 여러가지 이유? 사연? 제 나름대로 중요하다고 생각하는 부분이라, 그냥 제가 만들어 놓은 박스 형태로 가져가주시길 바라는 마음을 가지고 있습니다. ^^
  3. BlogIcon mokomoji 2012.12.11 21:56 신고  댓글주소  수정/삭제  댓글쓰기
    메모장 열었으면... xp에서는.. 윈도우7은 모르겠고..거긴 좀 다른.. 여튼..
    ㅂ자 눌르고 한자키 눌르면 바로 쳐나옴.. 골라서 쓰면 됨..
    물론 ms-dos 애기 한다면 님 방법도 한가지 방법이 되겠지만...
    언제 부터인가...XP SP3에서는 cmd에서 왜 입력 이 안되는지..알트 넘버로 입력하는 아스키 문자 입력.. 여튼..ㄱ-)a 이것 다 적용 되지는 않는듯..
    물론 알트 넘버로 아스키 입력 하는 법은 15년 전에 안 것이지만..
    윈도우에서는 그닥.. 추천 하고 싶지 않는 방식.. 물론..
    님이 알트 눌러서 번호 눌르는 것은 노트패드 열어서 하면 잘 입력 되지만.. 하지만 ㄱ- 라인은 없다는 것...
    아.. 윈도우 xp sp2까지는 있는 것 같았는데..현재 제것만 안되는 듯..sp3에서.. 물론..ㄱ- 이상한 것 많이 깔아서 헛병신 되었다면
    그럴수도 있음.. 여튼간.. 그렇구요..
    아스키코드 8은..글쎼염...?

    아스키 코드의 전형적인 표는..
    http://imbyuri.blog.me/110086524739 이건데..;;;
    msdos 부터 윈도우 xp sp2까지는 이걸 기준으로 쳐 나온 걸로 기억 하며, 현재 자바가 깔려서..아스키코드8로 처나오는 병맛이 되는 건지는 모르겠으나.. 아니면 윈도우 패치 되어서 그런건지 모르겠으나..
    알트로는 라인이 안그러지는 상황..;;
    • BlogIcon CApple 2012.12.12 02:21 신고  댓글주소  수정/삭제
      아스키 코드는 전형적인 표라는 게 있다기 보다는 모두 동일하지만 (명령 프롬프트에서) 제어 문자를 특수 문자로 변환하여 표시해줄 때, (또는 일부 특수 문자들의 경우) 언어 설정에 따라 (또는 폰트에 따라서도) 그 표현이 달라지는 것으로 알고 있습니다. 그래서 영문 윈도우와 한글 윈도우에서의 제어 문자 표시가 달라지는 것이고요.

      [img]https://lh4.googleusercontent.com/-t6NVRmdz_Eg/UMdrcrCiKkI/AAAAAAAAAS4/D527c4bB5r0/s576/515-01.png[/img]
      [img]https://lh3.googleusercontent.com/-Z0-jBhzSy5s/UMdrc0rogXI/AAAAAAAAAS8/89CxucMjvhQ/s576/515-02.png[/img]

      실제로 qbasic 에서 ASCII 문자표 를 영문 모드로 볼 때와 한글 모드로 볼 때 서로 다르게 표시되는 것을 확인할 수 있습니다. 저는 그러한 제어 문자의 출력을 한글 윈도우를 기준으로 실제로 출력되는 모양에 따라 정리한 것 뿐이죠. 이제와서 생각해보니 굳이 글에서처럼 정리할 필요가 없었군요. 그냥 qbasic 화면 캡쳐해서 올리면 되는 거였네요. ㅜ_ㅜ
  4. BlogIcon mokomoji 2012.12.11 22:13 신고  댓글주소  수정/삭제  댓글쓰기
    그리고 이것 저것도 다 귀찮고..윈도우만 되면..
    http://blog.naver.com/mokomoji/130074380981
    다 그러놓음..ㄱ-)a 그냥 게시물 찾아서 복사해서 쓰면 되는...
    인터넷 되는 윈도우 환경이면 그냥 게시물 찾는게 아스키값 외우거나..아니면
    뭐 물론..ㄱ- 몰라도 되지만.. 여튼간..
    굵은선 그리기라던가.. 두줄 그리기 라던가... -,.-a 그런것 안되시는듯..
    • BlogIcon CApple 2012.12.12 02:25 신고  댓글주소  수정/삭제
      근데 확장 아스키 코드가 ANSI 에서 저장이 되나요? Unicode 로만 가능한 것으로 알고 있고, 그래서 배치 파일에서는 사용하지 못하는 것으로 알고 있는데요. (테스트해보니 역시나 저장이 안 되네요.) 그리고 ㅂ -> 한자는 확장 아스키 코드가 아닌 2바이트 특수 문자에 속하는 것인지라 확장 아스키 코드의 그것과는 전혀 다른 종류이고요.

      아무튼 표준 아스키 코드의 제어 문자를 사용하나 ㅂ -> 한자와 같은 2바이트 특수 문자를 사용하나 이러나 저러나 영문에서 깨지는 것은 같네요...

      그러고 보니 ㅂ -> 한자를 통한 2바이트 특수 문자로 표를 그리면 특수 문자들 사이의 여백으로 인해서 출력이 깔끔하지 못한 것으로 알고 있었는데, 님의 말을 듣고 다시 테스트해보니 제어 문자를 통해 입력한 것과 동일하게 여백없이 깔끔하게 출력이 되네요. 해당 부분은 제가 뭔가 잘못 알고 있었던 듯 싶네요. 해당 부분에 대한 좋은 정보를 얻었네요. 감사합니다. ^^
    • mokomoji 2012.12.17 16:12 신고  댓글주소  수정/삭제
      선이 깨진 건...- _-)a
      다른 워드프로세서라던가.. 혹은 아래한글 도스버전에서
      선 그어서 아스키 값으로 저장하면..깨죠욤..ㄱ-)a
  5. BlogIcon mokomoji 2012.12.11 22:28 신고  댓글주소  수정/삭제  댓글쓰기
    본문 발취
    아스키 코드(ASCII Code) 로 입력한 것입니다. 표준 아스키 코드는 0~127 총 128 개의 문자열로 이루어져 있습니다. 32~126 은 알파벳이나 숫자, 특수 문자와 같은 일반적인 문자(Graphic Characters, Letter)이고, 0~31, 127 은 인쇄 및 전송 제어용으로 사용되는 제어 문자(Control Characters)에 해당합니다. 제어 문자들은 원래 화면에 출력되는 글자가 아닌 Space, Delete, Cancel, Carriage return, Line feed, Backspace 등의 특정한 동작을 의미하는 것입니다.

    0~127 의 내용으로 님이 쓰신 표는 아스키 코드8 인듯..;;; 아스키 코드에는 표준 과 확장 코드가 있으며, 님이 쓰신 것은 아스키코드8 ? 새로 나온 표준 같은데..여튼간..그런듯..;;

    http://cafe.naver.com/funcc/1543 님것은 이것과 같다고 느껴짐..;;;
    원래 msdos에서는 라인값이 179부터 시작해서 긋고 내것와 같이 이상하게 패치된 윈도우는 님처럼 하는게 맞겠지만.. 근데 cmd에서는 입력 안되는.. 노트패드에서도 병맛이고 (입력은 되는데 표시가 안되는...) 여튼간.. 그러하다는.. 뭐 좋은 것 알아가긴 하나.. ㄱ- 알트 입력은 15년전부터 알고 있었던거구.. 컨트롤 입력은 님 블로그에서 본거구.. 음 그리고 아스키 코드값이 입력 안되길래.. cmd가 병진 됐나 생각 했는데.. 아스키 코드 8? 값이 나왔구러...;;; 여튼간.. 배울건 배우고.. 가지고 갈건 가지고 간다는..;;
    • BlogIcon CApple 2012.12.12 02:23 신고  댓글주소  수정/삭제
      7비트 표준 아스키 코드나 8비트 확장 아스키 코드나 0~127 까지는 동일하고,

      [img]https://lh3.googleusercontent.com/-hJR78bArTwU/UMdhkAy73KI/AAAAAAAAASg/VZofBaFr-i8/s576/ASCII_Code_Chart.svg.png[/img]

      이제 8비트 확장 아스키 코드는 128~255 까지가 추가로 더 있는 것이 아닌가요? 그리고 출력이 다르게 되는 것은 아스키 코드가 다른 게 아니라 위의 댓글에서 이야기한대로 같은 코드를 언어 설정 등에 따라 다른 특수 문자로 해석하는 차이일 뿐이고요.
  6. BlogIcon CApple 2012.12.12 02:16 신고  댓글주소  수정/삭제  댓글쓰기
    아참 그리고 명령 프롬프트의 기본 글꼴은 굴림체가 아닌 Terminal 글꼴입니다. 제가 실수했네요. 그에 맞춰 본문의 내용을 수정하였음을 알려드립니다.
  7. 2013.06.02 13:33 신고  댓글주소  수정/삭제  댓글쓰기
    저 메모장에 아스키코드 안써져요...
    • BlogIcon CApple 2013.06.02 14:50 신고  댓글주소  수정/삭제
      윈도우 XP 에선 아스키 코드가 다른 모양으로 표시됩니다. 그게 아니라 아예 안 써진다면 그건 정확하게 무슨 상황인지 모르겠네요.

댓글을 달아 주세요

- 댓글에선 예의를 지켜주시기 바라며, 블로그지기는 댓글에서 따로 활동하지 않습니다.

* 티스토리 사용자는 여기를 클릭하시면 로그인 됩니다.

BBCode 안내   굵게 밑줄 기울임 취소선   취소선 취소선 취소선 취소선   왼쪽 정렬 가운데 정렬 오른쪽 정렬   코드박스 인용구 이미지   이미지 업로드-Imgur.com