카테고리: IT·활용 팁

윈도우 작업 자동화, 배치파일 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는 문서로, 이미지는 이미지 폴더로, 날짜별로 나눠서" 같은 요구가 붙는 순간 배치파일 문법은 급격히 고통스러워집니다 😇

🧩 같은 작업, 파이썬으로 하면? - 조건이 붙어도 여유롭게

이번엔 파이썬으로 확장자별 분류 + 날짜 폴더 정리까지 한 번에 해볼게요. 배치파일로 짜면 머리가 아픈 로직인데, 파이썬은 표준 라이브러리만으로 깔끔하게 됩니다.

Python
# 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처럼 번호를 붙이는 로직을 추가하세요.
Python
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) 만들기에 도전해볼 거예요. 검은 콘솔 창을 벗어나 버튼 달린 진짜 '프로그램'을 만들어봅시다. 기대해주세요!

📚 함께 보면 좋은 글

글쓴이

Mojangcam

직접 코드를 짜고, 서버를 돌리고, 막힌 에러를 해결하며 배운 것들을 기록하는 개발·IT 실전 기록 블로그