Windows BAT 스크립트 작성 가이드

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) 전환을 권장

이 글이 도움이 되었나요?