윈도우 작업 자동화, 배치파일 vs 파이썬 - 차이와 선택 기준 ⚙️
목차9개 항목
안녕하세요! Mojangcam입니다 😎
매일 하는 반복 작업, 아직도 손으로 하고 계신가요? 다운로드 폴더에 쌓인 파일 정리, 백업 복사, 프로그램 여러 개 한 번에 켜기… 이런 일은 컴퓨터한테 시키면 됩니다. 그런데 막상 자동화를 검색해보면 두 갈래 길이 나와요. 윈도우에 기본으로 있는 배치파일(.bat), 그리고 요즘 대세인 파이썬(Python). 오늘은 이 둘의 차이를 실제 코드로 비교해보고, 어떤 상황에 뭘 쓰면 되는지 확실하게 정리해드릴게요!
🧠 결론부터 말할게요
"명령어 두세 줄로 끝나는 단순 작업은 배치파일, 조건·데이터·예외 처리가 등장하는 순간 파이썬" 입니다. 그리고 실무에서 제일 강력한 건 둘 중 하나를 고르는 게 아니라, 배치파일이 파이썬을 실행해주는 조합이에요. 글 끝에서 이 조합 레시피까지 알려드릴게요 💡
📌 한눈에 보는 비교 표
| 구분 | 배치파일 (.bat) | 파이썬 (.py) |
|---|---|---|
| 설치 | ❌ 필요 없음 (윈도우 기본) | ⭕ 파이썬 설치 필요 |
| 진입 장벽 | 명령어 몇 개면 바로 시작 | 기초 문법 학습 필요 |
| 할 수 있는 일 | 파일 복사·이동, 프로그램 실행 등 단순 작업 | 엑셀·PDF·웹 크롤링·API까지 사실상 전부 |
| 조건문·반복문 | 되긴 하지만 문법이 고통스러움 | if·for로 편안하게 |
| 에러 처리 | 사실상 없음 | try·except로 안전하게 |
| 다른 PC에서 실행 | 파일 하나 복사하면 끝 | 그 PC에도 파이썬 설치 필요 |
| 어울리는 작업 | 5줄 이하 단순 반복 | 데이터·조건이 들어가는 모든 것 |
🛠️ 준비물
- 윈도우 10 또는 11 (배치파일은 기본 메모장 + cmd만 있으면 됩니다)
- 파이썬 예제용: Python 3.14.4 기준으로 작성했지만 3.8 이상이면 전부 동작해요 (표준 라이브러리만 사용, pip 설치 없음!)
- 파이썬 설치 시 Add python.exe to PATH 체크 필수 (안 하면 아래 에러 2번을 만나게 됩니다 😅)
🧩 배치파일(.bat)이란? - 메모장으로 만드는 자동화
배치파일은 cmd(명령 프롬프트)에서 치는 명령어들을 텍스트 파일에 순서대로 적어둔 것이에요. 메모장에 적고 확장자만 .bat으로 저장하면 끝. 더블클릭하면 위에서부터 한 줄씩 실행됩니다.
예제로 다운로드 폴더의 PDF를 문서 폴더로 옮기는 배치파일을 만들어볼게요.
@echo off
chcp 65001 > nul
REM 다운로드 폴더의 PDF를 문서 폴더로 이동
set SRC=%USERPROFILE%\Downloads
set DST=%USERPROFILE%\Documents\PDF모음
if not exist "%DST%" mkdir "%DST%"
move "%SRC%\*.pdf" "%DST%" > nul 2>&1
echo PDF 정리 완료!
pause메모장에 붙여넣고 pdf정리.bat으로 저장한 뒤 더블클릭하면 바로 동작해요.
하나씩 뜯어볼게요 💡
- @echo off : 실행되는 명령어가 화면에 일일이 출력되지 않게 꺼주는 스위치예요. 배치파일 1행 국룰입니다.
- chcp 65001 : 콘솔 인코딩을 UTF-8로 변경. 한글 깨짐 방지용이에요 (뒤의 > nul은 "Active code page…" 메시지 숨기기).
- REM : 주석입니다. 파이썬의 #과 같은 역할.
- %USERPROFILE% : C:\Users\내이름 폴더를 가리키는 환경변수. 누구 컴퓨터에서든 동작하게 해줘요.
- if not exist … mkdir : 대상 폴더가 없으면 만들기.
- move : 파일 이동 명령. *.pdf처럼 와일드카드도 됩니다.
- pause : "계속하려면 아무 키나 누르십시오" — 창이 바로 닫히지 않게 잡아주는 역할이에요.

딱 보면 아시겠지만, 이 정도 단순 작업엔 배치파일이 정말 편해요. 설치도 없고, 파일 하나 복사하면 어느 윈도우 PC에서든 돌아가니까요. 그런데… "PDF는 문서로, 이미지는 이미지 폴더로, 날짜별로 나눠서" 같은 요구가 붙는 순간 배치파일 문법은 급격히 고통스러워집니다 😇
🧩 같은 작업, 파이썬으로 하면? - 조건이 붙어도 여유롭게
이번엔 파이썬으로 확장자별 분류 + 날짜 폴더 정리까지 한 번에 해볼게요. 배치파일로 짜면 머리가 아픈 로직인데, 파이썬은 표준 라이브러리만으로 깔끔하게 됩니다.
# organizer.py — Python 3.8+ (표준 라이브러리만 사용, pip 설치 불필요)
from pathlib import Path
from datetime import date
import shutil
SRC = Path.home() / "Downloads"
RULES = {
".pdf": "문서", ".docx": "문서", ".xlsx": "문서",
".png": "이미지", ".jpg": "이미지", ".gif": "이미지",
".zip": "압축", ".exe": "설치파일",
}
today = date.today().strftime("%Y-%m-%d")
for file in SRC.iterdir():
if not file.is_file():
continue # 폴더는 건너뛰기
category = RULES.get(file.suffix.lower())
if category is None:
continue # 규칙에 없는 확장자는 그대로 두기
dst = SRC / "정리함" / category / today
dst.mkdir(parents=True, exist_ok=True)
shutil.move(str(file), str(dst / file.name))
print(f"[이동] {file.name} -> {category}/{today}")
print("정리 완료!")실행은 cmd에서 python organizer.py 한 줄이면 됩니다.
하나씩 뜯어볼게요 💡
- Path.home() : 배치파일의 %USERPROFILE%과 같은 내 홈 폴더예요. / 연산자로 하위 경로를 자연스럽게 이어 붙입니다.
- RULES 딕셔너리 : "확장자 → 폴더 이름" 규칙표. 여기에 한 줄만 추가하면 새 분류가 생겨요. 배치파일이라면 if 블록을 통째로 복붙해야 하는 부분입니다.
- file.suffix.lower() : 확장자를 소문자로 통일해서 .PDF, .pdf를 같게 취급해요.
- mkdir(parents=True, exist_ok=True) : 중간 폴더까지 한 번에 만들고, 이미 있어도 에러를 내지 않는 옵션 조합. 실무 필수 패턴이에요.
- shutil.move() : 파일 이동. 배치파일 move와 같지만, 파이썬에서는 실패 시 try·except로 잡아서 로그를 남기는 것까지 확장할 수 있죠.

확장자별 분류, 날짜 폴더, 규칙 추가… 조건이 늘어나도 코드가 무너지지 않는 게 파이썬의 힘이에요. 여기서 더 나가면 엑셀 기록, 완료 알림 전송까지 붙일 수 있는데, 그건 제 파이썬 업무 자동화 시리즈에서 하나씩 다루고 있습니다 😉
📌 상황별 추천 - 이럴 땐 이걸 쓰세요
배치파일이 정답인 경우
- 프로그램 여러 개를 순서대로 실행하고 싶을 때 (예: 아침에 업무 프로그램 5개 한 번에 켜기)
- 폴더 통째로 백업 복사 같은 한두 줄짜리 작업
- 파이썬을 설치할 수 없는 회사 PC·서버에서 돌려야 할 때
- 지금 만든 파이썬 스크립트를 실행시키는 버튼이 필요할 때 (아래 조합 레시피!)
파이썬이 정답인 경우
- "~인 경우에만", "~별로 나눠서" 같은 조건·분류가 들어갈 때
- 엑셀·PDF·웹페이지·API 등 데이터를 다룰 때
- 실패했을 때 로그를 남기거나 재시도하는 안전장치가 필요할 때
- 앞으로 기능이 계속 늘어날 것 같은 작업일 때
💡 꿀팁: 최강 조합 - 배치파일로 파이썬을 실행하자
실무에서 제가 쓰는 방식은 이거예요. 로직은 파이썬이 담당하고, 실행은 배치파일이 담당하는 분업 구조!
@echo off
REM run_organizer.bat — organizer.py 실행 버튼
cd /d %~dp0
python organizer.py
pause- cd /d %~dp0 : 배치파일이 있는 폴더로 이동한 뒤 실행해요. 작업 스케줄러에서 돌릴 때 경로가 꼬이는 문제를 예방하는 핵심 한 줄입니다.
이렇게 만들어두면 더블클릭 한 번으로 파이썬 스크립트가 돌아가고, 나아가 윈도우 작업 스케줄러에 이 bat 파일을 등록하면 매일 정해진 시간에 자동 실행됩니다. cmd에서 한 줄로도 등록할 수 있어요.
schtasks /create /tn "다운로드정리" /tr "C:\tools\run_organizer.bat" /sc daily /st 09:00매일 오전 9시에 다운로드 폴더가 스스로 정리되는 거죠. 참고로 파이썬 쪽에서 예약 실행을 처리하는 방법(schedule·APScheduler)은 예전에 쓴 파이썬 업무 자동화 #6 - 예약 실행 자동화 편에서 자세히 다뤘으니 같이 보시면 좋아요!

📌 자주 나는 에러
1. 배치파일 실행 시 한글이 와장창 깨져요
- 원인: cmd 기본 인코딩(cp949)과 메모장 저장 인코딩(UTF-8)이 달라서 생기는 문제예요.
- 해결: 배치파일 상단에 chcp 65001을 넣고, 메모장에서 저장할 때 인코딩을 UTF-8로 맞춰주세요. 그래도 깨지면 반대로 ANSI로 저장하는 방법도 있습니다. 만약 '다운로드'은(는) 내부 또는 외부 명령...처럼 한글 줄이 통째로 명령어로 실행되는 오류가 난다면 인코딩·줄바꿈 문제예요. 이때는 chcp 줄을 빼고 ANSI로 저장 + 줄바꿈 CRLF가 제일 확실합니다 (VS Code로 만들었다면 오른쪽 아래 줄바꿈이 LF로 돼 있지 않은지 꼭 확인!).
2. 'python'은(는) 내부 또는 외부 명령... 이 아닙니다
- 원인: 파이썬이 설치는 됐지만 PATH 환경변수에 등록되지 않은 상태예요.
- 해결: 설치 프로그램을 다시 실행해 Add python.exe to PATH를 체크하거나, python 대신 py 런처(py organizer.py)를 사용해보세요.
3. 더블클릭하면 검은 창이 번쩍하고 사라져요
- 원인: 에러가 났든 정상 종료됐든, 작업이 끝나면 창이 즉시 닫히기 때문에 결과를 볼 수 없는 거예요.
- 해결: 배치파일 마지막 줄에 pause를 추가하거나, cmd 창을 먼저 열고 그 안에서 직접 실행하면 에러 메시지를 확인할 수 있습니다.
4. shutil.Error: Destination path '...' already exists
- 원인: shutil.move(파일, 폴더)처럼 목적지를 폴더로 줬는데 그 안에 같은 이름의 파일이 이미 있을 때 발생해요. (오늘 예제처럼 전체 경로를 지정하면 에러 대신 조용히 덮어쓰기 때문에, 중요한 파일이라면 아래처럼 이름을 바꿔 옮기는 게 안전합니다!)
- 해결: 이동 전에 이름을 바꿔주면 됩니다. 예를 들어 dst / file.name이 존재하면 보고서(1).pdf처럼 번호를 붙이는 로직을 추가하세요.
target = dst / file.name
n = 1
while target.exists():
target = dst / f"{file.stem}({n}){file.suffix}"
n += 1
shutil.move(str(file), str(target))📌 마무리
오늘은 윈도우 작업 자동화의 두 가지 도구, 배치파일과 파이썬을 비교해봤어요. 정리하면 — 설치 없이 단순 작업을 빠르게 처리할 땐 배치파일, 조건과 데이터가 얽힌 작업은 파이썬, 그리고 실전에서는 배치파일이 파이썬을 실행해주는 조합이 최강이라는 것! 오늘 만든 organizer.py + run_organizer.bat 세트를 작업 스케줄러에 걸어두면 여러분의 다운로드 폴더는 오늘부터 알아서 정리됩니다 🙌
다음 글에서는 파이썬 tkinter로 나만의 미니 프로그램(GUI) 만들기에 도전해볼 거예요. 검은 콘솔 창을 벗어나 버튼 달린 진짜 '프로그램'을 만들어봅시다. 기대해주세요!
📚 함께 보면 좋은 글
