나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2025-03-12 15:25:05

배치 파일

1. 개요2. 문법 예시
2.1. 예시 12.2. 예시 22.3. 예시 32.4. 예시 4
3. 악용

1. 개요

배치 파일(Batch File)[1]은 마이크로소프트사의 DOS 운영체제인 MS-DOS에서 명령어을 입력하기 번거롭거나 입력하는 데 익숙하지 않은 사용자를 위해 명령어를 한번에 적어놓고 실행하는 명령어 스크립트이다. .bat 혹은 .cmd 형식의 확장자 파일을 직접 실행하거나 명령 프롬프트에서 배치 파일의 이름으로 실행할 수도 있다.

한편 잘 모르는 사람들에게 bat와 cmd는 확장자만 다르고 나머지는 똑같다 여겨지지만, 완전히 같은 것은 아니다. 전체적으로는 같은 배치 파일이지만 bat 파일은 MS-DOS윈도우 9x 환경에서 실행하고, cmd 파일은 윈도우 NT 이후의 환경에서만 실행하라고 나눠둔 것이다. 이는 운영체제의 변화로 인해 NT 이전의 명령어가 NT 이후로 넘어가면, 같은 이름을 가진 명령어임에도 다른 기능을 하는 경우가 있고, 거기에 더해서 NT 이전의 환경에서는 없던 새로운 기능이 나왔기 때문이다. 이런 상황에서 파일 확장자가 bat로 동일하게 되면 사용자 입장에서는 혼동을 일으키고 잘못된 사용을 유발하여 여러 가지 문제를 겪을 수 있다. 이런 문제를 방지하고자 NT 이후에서만 실행되는 확장자를 새로 만들어 문제를 해결하게 되는데, 이 과정에서 cmd 확장자가 탄생했다. 물론 bat 파일이 윈도우 10 같은 데서 작동이 안되는 건 아니고 여전히 잘 작동하며, 전문가라면 몰라도 윈도우 9x 환경을 사용할 일이 거의 없는 일반 사용자들은 cmd 파일을 신경쓰지 말고 그냥 bat 파일을 사용해도 된다.

배치 파일은 MS-DOS 시절부터 나온 오래된 개념이지만, 윈도우 10에 이른 현재에도 강력한 기능을 이용해 다방면에서 굉장히 유용하게 사용된다. 특히 서버 분야에서 상당히 폭 넓은 활용도를 가지는데, DB 관리와 백업 등에서도 상당히 많이 사용된다. 또한 윈도우 스케쥴러 등을 이용해 다소 반복적이고 귀찮은 업무를 자동화하는 데 많이 사용된다.[2][3] 이런 전문적인 업무 외에도 많은 게임들에서 서버 운영을 하는 것에 배치 파일을 많이 사용하고[4] 게임 실행 등에도 사용된다. 컴퓨터에 다소 전문적인 일들을 하는 전문직 종사자가 아닌 일반 사용자들은 딱히 사용하지 않아도 되므로 의외로 과소평가되는 파일이기도 하다.

이 외에도 윈도우가 오류를 일으켜 기능상의 문제를 겪을 때에도 오류를 수정하는 내용을 넣은 배치 파일을 만들어서 실행 한 번 만으로 다양한 오류를 수정하는 파일을 만들어 두고두고 써먹을 수도 있다.[5] 구글링을 좀 해보면 심각한 윈도우 오류도 수정해주는 픽스 배치 파일들을 많이 볼 수 있다. Malware Zero의 실행 파일 역시 배치 파일로 되어있다.

또한 한 번의 파일 실행으로 다수의 명령어를 처리하여 많은 행동을 할 수 있다는 점에서 매크로와도 비슷하다. 물론 매크로가 GUI 등의 이유로 사용하기는 편하겠지만, 기능적으로는 배치 파일이 훨씬 뛰어나다.

아무 내용이나 쓰여 있어도 일단 실행되는 것과 달리 배치파일의 크기가 0바이트이면 오류 메시지가 뜨고 실행되지 않는다. 심지어 스페이스 한 칸만 써도 오류는 뜨지 않는다.

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

@echo off
timeout 1
echo 1초 지남
n초를 기다리는 timeout 명령어이다.
"n초 기다리는 중.." 이렇게 표시된다.
표시되지 않게 하려면
@echo off
timeout 1 > nul
echo 표시되지 않았지만 1초 지남
이렇게 해야 한다.

3. 악용

꽤 강력한 기능을 가졌다는 것을 악용해서 프로그램 문법 강좌 예시 혹은 게임이나 기타 유용한 프로그램 따위로 위장하면서 그 내용물은 컴퓨터를 망가트리는, 사실상 바이러스나 다름없는 배치 파일들이 인터넷에 돌아다니는 경우도 있다. 어느 정도냐면 지금 당장 유튜브,구글과 같은 웹사이트에 "배치파일로 바이러스 만들기"라고 쳐도 관련 영상,자료들이 쫙 나올정도이다. 이런 배치파일들은 불법 다운로드 게임 실행파일, 크랙, 키젠 이외에 다양한 프로그램 등으로 속여넘기는 악성 배치 파일들이 대표적이다. 또한 이것들은 백신도 감지하지 못하고 인터넷 등을 통해 퍼질 수 있기 때문에 특히 주의해야 한다.[7]

때문에 배치 파일들을 받아 별 생각없이 그냥 실행하는 경우는 큰 곤경에 처할 수 있으니 안전을 생각한다면 귀찮더라도 반드시 사용자 계정 컨트롤을 활성화하고 최소한 실행 전에 바이러스 검사라도 돌려보는 편이 좋다. 전부는 아니더라도 어지간하면 백신에 잡힌다.

혹시 출처가 애매한 배치 파일을 실행했는데 컴퓨터 움직임이 뭔가 이상하다면 최후의 보루로 Ctrl + C를 연타해보자. 배치 파일은 실행 중간에 Ctrl + C로 실행을 중단시킬 수가 있다. 배치 파일에 지정된 외부 프로그램을 실행하고 있는 중이라면 당연히 반응하지 않겠지만, 그 외부 프로그램이 끝나고 배치 파일로 제어가 돌아왔을 때에는 중단이 가능하다.

[1] 한자어 배치(配置)가 아니고, 묶음이나 다발을 의미하는 영단어 Batch이다.[2] 서버와 관련된 일을 한다면 배치 파일을 지겹도록 만져볼 수 있는데, 특히 주기적으로 반복해야 하는 일 같은 것을 배치 파일을 예약 작업에 등록해두면 자동화가 되어 관리가 매우 편해지기에 배치 파일이 업무능률에 미치는 영향이 꽤 크다.[3] 또한 배치 파일이 가지는 강점은, 윈도우 자체 기능이기 때문에 별다른 프로그램의 설치 따위가 없어도 즉석에서 그냥 메모장 열어서 작성하면 바로 실행 가능한 결과물이 완성된다는 것.[4] 특히 평범한 유저 입장에서 데디케이티드 서버를 가동하는 경우는 배치 파일을 안 쓰는 경우가 더 드물 정도로 널리 쓰인다. 제작사에서 exe 방식으로 서버를 가동할 수 있게 제공한 게임들도 웬만해선 그냥 배치 파일로 가동하는 것이 보편적. 실제로 많은 해외 게임들의 서버 가동법 등의 튜토리얼을 보면 십중 팔구는 배치 파일 만들어서 실행하는게 나온다.[5] 윈도우 기능과 관련하여 자주 사용되는 부분이 바로 레지스트리 수정. 제대로 만들어두면 똑같은 문제가 재발했을 때, 복잡하고 긴 경로를 찾으며 헤멜 것도 없이 배치 파일만 실행하면 그만이라 레지스트리 수정과 관련해서는 거의 배치 파일이 등장한다.[6] 파이썬의 for문과 그나마 비슷한 편으로 다른 언어의 for문과는 조금 다르다. 루프, 제어문으로는 쓰기 힘들다.[7] bat, cmd 파일이 거의 exe 파일급으로 위험한 이유이기도 하다. 모르고 실행한 배치파일에 이런 게 들어있기라도 하면...

분류