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