배치 파일을 실행하다 보면 그 배치 파일의 실행 모습(명령 프롬프트 창의 모습)을 숨기고 싶을 때가 있습니다. 예를 들어 배치 파일을 시작 프로그램이나 작업 스케줄러에 등록하면 매번 윈도우 부팅 때마다 해당 배치 파일이 실행되는 모습을 지켜봐야 하죠. 잠깐이지만 은근히 이런 게 신경이 거슬릴 때가 있습니다.

그럴 땐 VBScript 를 통해 배치 파일의 실행 모습을 숨겨줄 수 있습니다. 바로 아래의 간단한 VBScript 를 통해서 말이죠.

Example.vbs
Set WinScriptHost = CreateObject( "WScript.shell" )
WinScriptHost.Run Chr(34) & "C:\Batch.cmd" & Chr(34), 0
Set WinScriptHost = Nothing


위의 스크립트는 간단하게 VBScript 를 통해 원하는 배치 파일을 실행하는 구조입니다. 즉, 먼저 원하는 배치 파일을 준비한 후, 빨간색으로 표시한 부분에 실행할 배치 파일의 경로를 넣으셔서 VBS 파일을 만들고, 이렇게 만든 VBS 파일을 실행하면 최종적으로 배치 파일이 화면 출력 없이 숨겨진 채로 실행이 되는 겁니다. 간단하죠? 이 때 위의 VBS 파일에 넣게 될 배치 파일의 경로는 절대 경로는 물론 상대 경로, 시스템 변수 경로도 사용할 수 있습니다.



굉장히 간단하죠? 이거 제가 배치 파일로 제작하는 도구들을 만들 때 꽤나 자주 사용하는 스크립트인데요. 요새 어디에 정리해놨는지 자꾸 까먹어서 나중에 필요할 때마다 간편하게 사용할 겸 해서 으슥한 밤을 틈타 포스팅으로 남겨 둡니다. 이상입니다. ^^;;

참고로 이 때 스크립트에서 Chr(34)"(큰 따옴표)를 의미합니다. 이게 왜 필요하냐면, VBScript 에서 "" 는 비주얼 베이직에서와 마찬가지로 그 안의 내용이 문자열임을 의미합니다. 즉, "C:\Batch.cmd" 는 C:\Batch.cmd 로 인식이 되는 것이죠. 그런데 이게 경로에 띄어쓰기가 존재하는 경우에는 결과적으로 Run 함수에 전체 경로가 정확하게 전달되지 못하는 문제가 있습니다.

배치 파일이든 뭐든 경로에 띄어쓰기가 존재하면 경로 전체를 "경로" 와 같이 큰 따옴표로 묶어줘야 합니다. 하지만 큰 따옴표는 VBScript 에서 예약되어 사용되는 특수 문자이기 때문에 별개로 큰 따옴표라는 특수 문자 자체를 전달하고자 할 때는 Chr(34) 를 사용하는 것이죠. 이러한 Chr(34) 큰 따옴표를 문자열 연결을 의미하는 & 연산자를 통해 전체 경로와 결합시키는 겁니다. 그래서 Chr(34) & "배치 파일 경로" & Chr(34) 는 최종적으로 "배치 파일 경로" 로 전달되는 겁니다.

그리고 그 뒤의 0 은 부울값으로 이 스크립트의 핵심이 되는 부분입니다. 이는 배치 파일의 실행 결과를 백그라운드로 실행하여 출력시키지 않는다는 의미이죠.(vbHide) 이게 1 이면 배치 파일의 실행 모습이 화면에 출력됩니다.(vbNormalFocus)

제가 아는 건 딱 여기까지입니다. 이에 대해 자세하게 질문을 하시면 저는 먼 산을 바라볼  밖에 없습니다. 프로그래밍에 관련된 제 지식은 상당히 난잡합니다. ㅎㅎㅎ

 

 

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

- 상업적인 용도의 사이트는 대상에서 제외됩니다. -
- 글에는 오류가 있을 수 있고, 추후 수정 또는 재발행될 수 있습니다. -
  1. BlogIcon 니드뽀폴쉐 2013.04.16 13:17 신고  댓글주소  수정/삭제  댓글쓰기
    전에 가상디스크 연결 질문에서 알려주셨던(?) 거군요.
    자주 부팅을 안하는데도 가끔 보기 싫긴 하더군요. ^^
  2. ZiNee 2013.05.17 10:47 신고  댓글주소  수정/삭제  댓글쓰기
    유용한 정보를 알려주셔서 감사합니다.
    가끔씩 배치파일을 만들 때에,
    창을 숨기는 방법을 궁금해 했던 기억이 납니다.
    방법을 몰랐었는데, 이렇게 하면 되는군요.
    유용한 강좌 고마워요~

    그런데요, 제가 초보라서 궁금한 것이 있습니다.

    1. *.cmd 와 *.bat 의 작성 방법, 명령어 등은 같은가요?
    2. *.cmd 외에 *.reg 파일을 병합 할 때에도 창이 뜨는데요,
    이 경우에도 창이 안 뜨게 하는 방법이 있는지요?
    • BlogIcon CApple 2013.05.18 05:32 신고  댓글주소  수정/삭제
      1. .bat 은 도스 시절부터 사용되던 배치 파일을 나타내는 확장자이고, .cmd 는 윈도우 시대로 넘어오면서 새롭게 배치 파일을 나타내는 확장자입니다. 결론적으로 .cmd 와 .bat 은 같은 종류의 파일입니다. 명령어나 뭐나 같지만 어쨌든 윈도우인 만큼 .cmd 를 쓰시는 게 어떨가 생가합니다.

      2. 윈도우에는 reg 명령이 있습니다. 키나 값 하나 하나를 제어하려면 rge add 나 reg delete 명령을 사용하면 되고, 준비된 .reg 파일을 적용하는 것이라면 reg import 명령으로 작업을 하게 되죠. 자세한 것은 reg /? 을 해보세요. 아무튼, 이러한 reg 명령을 통해 배치 파일로 구성하여 그걸 실행하게 하는 방법을 사용해야 합니다.
    • ZiNee 2013.05.19 12:27 신고  댓글주소  수정/삭제
      1. 도스 시절의 *.bat -> 윈도우에서는 *.cmd
      2. *.reg 창 안 띄우고 병합하기......
      ㄱ) *.reg 파일을 만든다.
      ㄴ) 'reg import' 를 통한 *.cmd 파일을 만든다.
      ㄷ) VBScript 파일을 이용하여 창이 안 뜨고 병합되도록 한다.

      ----
      위의 과정이 맞는지요?
      친절한 답변 감사합니다. (--)(__)
  3. BlogIcon SkyKiDS 2013.10.29 03:18 신고  댓글주소  수정/삭제  댓글쓰기
    일단 창이 실행되었다가 숨기는 것이 아니라, 아예 숨겨서 실행하나 봅니다?
    무인 설치 CD를 만들 때 CmdHide.exe 또는 cWnd.exe 등의 exe 파일을 배치 파일 안에 넣어서 숨겨버렸던 기억이 나네요. 배치 파일 안에 들어있기 때문에 배치 파일을 실행할 때 창이 보였다가 저 녀석들을 만나 숨겨지지요.

댓글을 달아 주세요

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

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

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