본문 바로가기

Windows/_System Programming

명령 프롬프트(Cmd) 작성

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <tchar.h>
#include <locale.h>
#define STR_LEN 256                                                   // 문자열 길이
#define CMD_TOKEN_NUM 10                                      // 입력가능한 최대 문자열 개수
TCHAR ERROR_CMD[100] = _T(" '%s'는 실행할 수 있는 프로그램이 아닙니다. \n");
INT_PTR CmdProcessing();
TCHAR* StrLower(TCHAR*);
INT_PTR _tmain(INT_PTR argc, TCHAR* argv[])
{
       _tsetlocale(LC_ALL, _T("Korean"));                         // 유니코드 한글을 입력받기 위해
       INT_PTR isExit;
       while(TRUE)                                                         // 무한루프
       {
                isExit = CmdProcessing();
                if(isExit == TRUE)
                {
                          _tprintf(_T("종료합니다. \n"));
                          break;
                }
       }
       return 0;
}
TCHAR cmdString[STR_LEN] = {0};
TCHAR CmdTokenList[CMD_TOKEN_NUM][STR_LEN];
TCHAR seps[] = _T(" , \t \n");
INT_PTR CmdProcessing()                                           // 명령어 입력받아서 해당 명령어 기능 수행 함수
{
        _tprintf(_T("Command Prompt >> "));
        _tscanf(_T("%s"), cmdString);                               // 명령어 입력받음

        TCHAR* token = _tcstok(cmdString, seps);             // 명령어를 분리함, ex) copy a b  -> copy,    a,      b         INT_PTR tokenNum = 0;         while(token != NULL)         {                 _tcscpy(CmdTokenList[tokenNum++], StrLower(token));  // 분리된 문자열이 없을때까지                                                                                                    // 모두 소문자로 변경한 명령어를 붙여넣음                 token = _tcstok(NULL, seps);         }         if(!_tcscmp(CmdTokenList[0], _T("exit")))                                         {                  return TRUE;         }         else if(!_tcscmp(CmdTokenList[0], _T("추가명령어")))             // 명령어가 개수만큼 else if 추가         {         }                else                                                                                   // 해당명령어가 없으면 에러출력         {               _tprintf(ERROR_CMD, CmdTokenList[0]);          }          return 0; } TCHAR* StrLower(TCHAR* pStr)                                      // 대문자 -> 소문자 (대소문자 구별없게 하기 위해서) {          TCHAR* ret = pStr;                  while(*pStr)                                                          // NULL 만날때까지 반복,          {                  if(_istupper(*pStr))                                         // 대문자이면                  {                          *pStr = _tolower(*pStr);                           // 소문자로 변경                  }                  pStr++;           }                 return ret; }