[목차] == 개요 == 배치 파일(Batch File)[* 한자어 배치(配置)가 아니고, 묶음이나 다발을 의미하는 영단어 Batch이다.]은 마이크로소프트사의 DOS 운영체제인 [[MS-DOS]]에서 명령어치는 게 익숙치 않은 사용자를 위해 명령어를 한번에 적어놓고 실행 하게 할 수 있게 만들어서 편리하게 사용자가 타이핑 치는 수고를 줄여 놓은 명령어 스크립트이다. .bat 혹은 .cmd 형식의 확장자 파일을 직접 실행하거나 [[명령 프롬프트]]에서 배치 파일의 이름으로 실행할 수도 있다. 잘 모르는 사람들은 그냥 bat, cmd 두 파일이 확장자만 다르고 나머진 똑같다고 보지만, '''절대로''' 완전히 같은 것이라고 생각해서는 '''안 된다.''' 전체적으로는 같은 배치 파일이지만 bat 파일은 [[MS-DOS]], 그리고 [[Windows 9x|윈도우 9x 환경]]에서 실행하고, cmd 파일은 [[Windows NT|윈도우 NT 이후의 환경]]에서만 실행하라고 나눠둔 것이다. 운영체제의 변화로 인해 NT 이전의 명령어가 NT 이후로 넘어가면, 같은 이름을 가진 명령어임에도 다른 기능을 하는 경우가 생기며, 거기에 더해서 NT 이전의 환경에서는 없던 [[업그레이드|아예 새로운 기능이 생겨버리기도 했다.]] 하지만 파일 확장자는 bat로 동일하기 때문에 사람 입장에선 헷갈려서 잘못 사용하여 여러가지 문제를 겪을 수 있다. 이런 문제를 해결하고자 NT 이후에서만 실행되는 cmd 파일을 만들어서 실행 가능한 환경을 확장자로 구분지어 문제를 해결한 것이고 이 때문에 bat, cmd 두 파일을 같은 것이라 생각하면 '''안''' 되는 것이다. 물론 bat 파일이 윈도우 10 같은 데서 작동이 안되는 건 아니고 여전히 잘 작동하며, 전문가라면 몰라도 윈도우 9x 환경을 사용할 일이 거의 없는 일반 사용자들은 cmd 파일을 신경쓰지 말고 그냥 bat 파일을 사용해도 된다. 배치 파일은 MS-DOS 시절부터 나온 오래된 개념이지만, 윈도우 10에 이른 현재에도 강력한 기능을 이용해 다방면에서 굉장히 유용하게 사용된다. 특히 서버 분야에서 상당히 폭 넓은 활용도를 가지는데, DB 관리와 백업 등에서도 상당히 많이 사용된다. 또한 윈도우 스케쥴러 등을 이용해 다소 반복적이고 귀찮은 업무를 자동화하는 데 많이 사용된다.[* 서버와 관련된 일을 한다면 배치 파일을 지겹도록 만져볼 수 있는데, 특히 주기적으로 반복해야 하는 일 같은 것을 배치 파일을 예약 작업에 등록해두면 자동화가 되어 관리가 매우 편해지기에 배치 파일이 업무능률에 미치는 영향이 꽤 크다.][* 또한 배치 파일이 가지는 강점은, 윈도우 자체 기능이기 때문에 별다른 프로그램의 설치 따위가 없어도 즉석에서 그냥 메모장 열어서 작성하면 바로 실행 가능한 결과물이 완성된다는 것.] 이런 전문적인 업무 외에도 많은 게임들에서 서버 운영을 하는 것에 배치 파일을 많이 사용하고[* 특히 평범한 유저 입장에서 [[데디케이티드 서버]]를 가동하는 경우는 배치 파일을 안 쓰는 경우가 더 드물 정도로 널리 쓰인다. 제작사에서 exe 방식으로 서버를 가동할 수 있게 제공한 게임들도 왠만해선 그냥 배치 파일로 가동하는 것이 보편적. 실제로 많은 해외 게임들의 서버 가동법 등의 튜토리얼을 보면 십중 팔구는 배치 파일 만들어서 실행하는게 나온다.] 게임 실행 등에도 사용된다. 컴퓨터에 다소 전문적인 일들을 하는 전문직 종사자가 아닌 일반 사용자들은 딱히 사용하지 않아도 되므로 의외로 과소평가되는 파일이기도 하다. 이 외에도 윈도우가 오류를 일으켜 기능상의 문제를 겪을 때에도 오류를 수정하는 내용을 넣은 배치 파일을 만들어서 실행 한 번 만으로 다양한 오류를 수정하는 파일을 만들어 두고두고 써먹을 수도 있다.[* 윈도우 기능과 관련하여 자주 사용되는 부분이 바로 [[레지스트리]] 수정. 제대로 만들어두면 똑같은 문제가 재발했을 때, 복잡하고 긴 경로를 찾으며 헤멜 것도 없이 배치 파일만 실행하면 그만이라 레지스트리 수정과 관련해서는 거의 배치 파일이 등장한다.] 구글링을 좀 해보면 심각한 윈도우 오류도 수정해주는 픽스 배치 파일들을 많이 볼 수 있다. [[Malware Zero]]의 실행 파일 역시 배치 파일로 되어있다. 또한 한 번의 파일 실행으로 다수의 명령어를 처리하여 많은 행동을 할 수 있다는 점에서 매크로와도 비슷하다. 물론 매크로가 GUI 등의 이유로 사용하기는 편하겠지만, 기능적으로는 배치 파일이 훨씬 뛰어나다. == 문법 예시 == === 예시 1 === {{{ @echo off echo Hello, world! pause>nul }}} "Hello, World!"를 출력하려면 위와 같이 코딩하면 된다. === 예시 2 === {{{ @echo off echo 컴퓨터를 지금 끌까요? (예/아니요) set /p "shutdown=>" if %shutdown%== "예" goto shutdown if not "%shutdown%" == "예" goto not :not echo 거부하셨습니다. pause>nul exit :shutdown shutdown -s -t 0 echo 컴퓨터를 종료합니다. pause>nul exit }}} 컴퓨터가 사용자에게 컴퓨터를 끌것인가를 물어보고, 만약 대답이 "예" 라면 종료한다. 만약 대답이 "예"가 아니면 배치 파일을 종료한다. 참고로 이 배치 파일은 MS-DOS에서는 작동하지 않는다. === 예시 3 === {{{ for %%i in (*.*) do if not "%~nx0"=="%%~nxi" ( if not exist "%%~xi\" md "%%~xi" move "%%i" "%%~xi" ) }}} 파일을 확장자별로 분류해서 폴더에 넣어주는 배치 파일. 배치 파일의 for에 익숙하다면[* 다른 언어들과는 기능이 꽤 다르다. 일단 루프, 제어문으로는 쓰기 힘들다.] 명령 프롬프트에서 한 줄로 처리해버릴 수도 있다. === 예시 4 === {{{ :a date 4444/04/04 time 4:44:44 goto a }}} goto문을 이용한 시간을 4로 바꾸고 계속 유지시켜주는 주는 배치파일이다. 실행을 할때 관리자권한으로 실행시켜야한다. 시간을 원래대로 바꾸고 싶다면 시계를 우클릭하면 나오는 시간/날짜 조정에서 변경하면된다.[[https://www.youtube.com/watch?v=yFIGiS9DOAw|이것을 응용하여 재미있게 만들 수 있다]] == 악용 == 꽤 강력한 기능을 가졌다는 것을 악용해서 프로그램 문법 강좌 예시 혹은 게임이나 기타 유용한 프로그램 따위로 위장하면서 그 내용물은 컴퓨터를 망가트리는, 사실상 바이러스나 다름없는 배치 파일들이 인터넷에 돌아다니는 경우도 있다. 어느정도냐면 지금 당장 유튜브,구글과 같은 웹사이트에 "배치파일로 바이러스 만들기"라고 쳐도 관련 영상,자료들이 쫙 나올정도이다. 이런 배치파일들은 불법 다운로드 게임 실행파일, 크랙, 키젠 이외에 다양한 프로그램 등으로 속여넘기는 악성 배치 파일들이 대표적이다. 또한 이것들은 백신도 감지하지 못할 수 있기 때문에 특히 주의해야 한다. 때문에 배치 파일들을 받아 별 생각없이 그냥 실행하는 경우는 큰 곤경에 처할 수 있으니 안전을 생각한다면 귀찮더라도 반드시 [[사용자 계정 컨트롤]]을 활성화하고 최소한 실행 전에 바이러스 검사라도 돌려보는 편이 좋다. 전부는 아니더라도 어지간하면 백신에 잡힌다. [[분류:파일 형식]]