BAT 파일이란?
BAT(Batch) 파일은 Windows 명령 프롬프트(CMD)에서 실행되는 스크립트 파일입니다. 확장자 .bat 또는 .cmd로 저장하며, 여러 명령어를 순차적으로 자동 실행합니다. 반복 작업 자동화, 환경 설정, 배포 스크립트 등에 널리 사용됩니다.
이 글에서는 BAT 파일의 기본 문법, 변수, 조건문, 반복문, 그리고 실전 자동화 스크립트까지 다룹니다.
기본 문법
BAT 파일의 첫 줄은 보통 @echo off로 시작합니다. 이 명령은 이후 실행되는 명령어가 화면에 표시되지 않도록 합니다.
@echo off
REM 이 줄은 주석입니다
echo 안녕하세요, BAT 스크립트입니다!
echo 현재 날짜: %date%
echo 현재 시간: %time%
pause
pause는 “계속하려면 아무 키나 누르십시오…” 메시지를 표시하고 사용자 입력을 기다립니다. 스크립트 실행 결과를 확인할 때 유용합니다.
| 명령어 | 설명 | 예시 |
|---|---|---|
@echo off | 명령어 표시 비활성화 | 스크립트 첫 줄에 사용 |
echo | 메시지 출력 | echo Hello |
REM | 주석 | REM 설명 텍스트 |
pause | 사용자 입력 대기 | 결과 확인용 |
cls | 화면 지우기 | 출력 초기화 |
exit | 스크립트 종료 | exit /b 0 (성공 코드) |
변수와 매개변수
BAT에서 변수는 set 명령으로 선언하고, %변수명%으로 참조합니다. 스크립트 실행 시 전달되는 인수는 %1, %2 등으로 접근합니다.
@echo off
REM 변수 선언과 사용
set PROJECT_NAME=MyApp
set VERSION=1.0.0
echo 프로젝트: %PROJECT_NAME% v%VERSION%
REM 사용자 입력 받기
set /p USER_NAME=이름을 입력하세요:
echo 안녕하세요, %USER_NAME%님!
REM 숫자 연산 (/a 옵션)
set /a RESULT=10+20
echo 10 + 20 = %RESULT%
REM 매개변수 사용 (script.bat arg1 arg2)
echo 첫 번째 인수: %1
echo 두 번째 인수: %2
echo 모든 인수: %*
set /p는 사용자 입력을 받아 변수에 저장하고, set /a는 산술 연산을 수행합니다. 매개변수 %0은 스크립트 자신의 경로입니다.
조건문과 반복문
if 문으로 조건 분기, for 문으로 반복을 처리합니다.
@echo off
REM === 조건문 ===
set /a NUM=15
REM 숫자 비교: EQU(==), NEQ(!=), LSS(<), LEQ(<=), GTR(>), GEQ(>=)
if %NUM% GEQ 10 (
echo %NUM%은 10 이상입니다
) else (
echo %NUM%은 10 미만입니다
)
REM 파일 존재 확인
if exist "config.ini" (
echo 설정 파일을 찾았습니다
) else (
echo 설정 파일이 없습니다. 기본값을 생성합니다
echo [default] > config.ini
)
REM === 반복문 ===
REM 파일 목록 순회
echo === 현재 폴더의 .txt 파일 ===
for %%f in (*.txt) do (
echo 파일: %%f
)
REM 숫자 범위 반복 (1부터 5까지)
for /l %%i in (1,1,5) do (
echo 카운트: %%i
)
BAT의 비교 연산자는 프로그래밍 언어와 다릅니다. == 대신 EQU, < 대신 LSS 등 영문 약어를 사용합니다. for 문에서 BAT 파일 내에서는 %% 를, CMD 직접 입력 시에는 %를 사용합니다.
| 비교 연산자 | 의미 | 프로그래밍 등가 |
|---|---|---|
EQU | 같다 | == |
NEQ | 다르다 | != |
LSS | 작다 | < |
LEQ | 작거나 같다 | <= |
GTR | 크다 | > |
GEQ | 크거나 같다 | >= |
실전 스크립트: 프로젝트 빌드 자동화
실무에서 자주 쓰이는 프로젝트 빌드 및 배포 자동화 스크립트입니다.
@echo off
setlocal enabledelayedexpansion
REM === 프로젝트 빌드 & 배포 스크립트 ===
set PROJECT_DIR=%~dp0
set BUILD_DIR=%PROJECT_DIR%dist
set LOG_FILE=%PROJECT_DIR%build.log
echo [%date% %time%] 빌드 시작 > "%LOG_FILE%"
REM 1. 이전 빌드 정리
if exist "%BUILD_DIR%" (
echo 이전 빌드 폴더 삭제 중...
rmdir /s /q "%BUILD_DIR%"
)
mkdir "%BUILD_DIR%"
REM 2. 빌드 실행
echo 빌드 실행 중...
call npm run build >> "%LOG_FILE%" 2>&1
if %ERRORLEVEL% NEQ 0 (
echo [오류] 빌드 실패! 로그를 확인하세요: %LOG_FILE%
exit /b 1
)
REM 3. 결과 확인
for /f %%a in ('dir /s /b "%BUILD_DIR%\*" ^| find /c /v ""') do set FILE_COUNT=%%a
echo 빌드 완료! 생성된 파일: !FILE_COUNT!개
echo [%date% %time%] 빌드 완료 (%FILE_COUNT% files) >> "%LOG_FILE%"
endlocal
pause
setlocal enabledelayedexpansion은 !변수! 구문으로 변수를 지연 확장합니다. 반복문 안에서 변수 값이 변경될 때 필수입니다. %ERRORLEVEL%은 직전 명령의 종료 코드로, 0이 아니면 에러를 의미합니다.
주의사항과 팁
경로에 공백이 있으면 따옴표 필수: cd "C:\Program Files\MyApp" — 따옴표 없으면 경로가 잘리며 에러 발생
call로 다른 BAT 호출: call other.bat으로 호출해야 현재 스크립트로 돌아옵니다. call 없이 호출하면 현재 스크립트가 종료됩니다.
인코딩: 한국어를 출력하려면 chcp 65001로 UTF-8 코드 페이지를 설정하세요.
정리
BAT 스크립트는 Windows 환경에서 가장 오래되고 범용적인 자동화 도구입니다. 핵심 포인트를 정리하면 다음과 같습니다.
@echo off로 시작,set으로 변수 선언,%변수%로 참조- 조건문은
if ... ( ) else ( ), 비교는EQU/NEQ/GTR등 영문 약어 - 반복문은
for— 파일 순회, 숫자 범위(/l), 명령 출력 파싱(/f) %ERRORLEVEL%로 에러 처리,call로 다른 스크립트 호출- 복잡한 로직이 필요하면 PowerShell(PS1) 전환을 권장