본문 바로가기
AI 코딩/클로드 코드

파이썬을 더블클릭으로 실행하기 — 메모장으로 배치파일(.bat) 만드는 법

by 아트스탁 2026. 8. 21.
한눈에
  • 배치파일은 «명령을 미리 적어둔 메모지»입니다. 메모장으로 적고 확장자를 .bat로 저장하면 그 순간부터 더블클릭으로 실행됩니다.
  • 세 줄이면 됩니다@echo off · cd /d "%~dp0" · py -X utf8 main.py. 가장 자주 빠뜨리는 건 두 번째 줄이고, 빠지면 「파일을 찾을 수 없습니다」가 납니다.
  • 창이 번쩍하고 닫히는 건 대개 실패가 아니라 «끝나서» 닫힌 것입니다. 맨 끝에 pause를 넣으면 메시지를 읽을 수 있습니다.
  • 한글이 깨질 때 chcp 65001만 넣으면 오히려 더 깨집니다. 파일도 UTF-8로 저장해 둘을 맞춰야 합니다 — 제 배치파일 64개 중 7개가 이 상태로 깨져 있었습니다.

클로드 코드로 처음 만든 건 조건에 맞는 종목을 골라주는 프로그램이었습니다. 만드는 건 됐습니다. 그런데 실행을 못 했습니다.

안내는 이랬습니다. "터미널을 열고 python main.py를 입력하세요." 저는 터미널이 뭔지도 몰랐습니다. 검은 창을 열었다가 뭘 잘못 누를까 봐 그냥 닫았습니다.

그래서 클로드에게 이렇게 말했습니다. "더블클릭하면 실행되게 해줘."

돌아온 건 배치파일이라는 것이었습니다. 그 뒤로 지금까지 만든 프로그램이 늘면서 이 파일도 같이 늘어, 지금 제 폴더에는 64개가 있습니다. 그동안 여기서 겪은 것을 처음 만드는 분 기준으로 정리해두겠습니다.

배치파일은 «명령을 미리 적어둔 메모지»입니다

터미널에 명령어를 한 줄씩 치는 대신, 그 줄들을 파일에 미리 적어두는 것이 배치파일입니다. 더블클릭하면 컴퓨터가 적힌 순서대로 대신 쳐줍니다.

특별한 프로그램은 필요 없습니다. 메모장이면 됩니다. 확장자만 .bat로 저장하면 그 순간부터 실행 파일이 됩니다.

메모장으로 만드는 법 — 여기서 한 번 막힙니다

순서는 이렇습니다.

메모장을 엽니다 → 내용을 적습니다 → 파일 → 다른 이름으로 저장파일 형식을 「모든 파일」로 바꿉니다 → 이름을 run.bat으로 적고 저장합니다.

네 번째가 핵심입니다. 파일 형식을 「텍스트 문서」로 둔 채 저장하면 이름이 run.bat.txt가 됩니다. 더블클릭해도 메모장만 다시 열립니다. 저는 이 함정에 두 번 걸렸습니다 — settings.json을 만들 때도 똑같이 당했습니다.

그리고 저장할 때 인코딩은 UTF-8로 두시기 바랍니다. 이유는 뒤에 나옵니다. 지금은 그냥 그렇게 해두시면 됩니다.

세 줄이면 파이썬을 더블클릭으로 실행할 수 있다

가장 짧은 배치파일은 세 줄입니다

@echo off
cd /d "%~dp0"
py -X utf8 main.py

한 줄씩 보겠습니다.

@echo off — 앞으로 나오는 명령어를 화면에 찍지 말라는 뜻입니다. 없어도 돌아가지만, 넣어두면 프로그램의 결과만 남아서 읽기가 훨씬 편합니다.

cd /d "%~dp0"이 줄이 가장 자주 빠지고, 빠지면 가장 헷갈립니다. %~dp0는 「이 배치파일이 놓인 폴더」라는 뜻이고, 그 폴더로 옮겨가라는 명령입니다.

왜 필요한가 하면, 더블클릭할 때와 바로가기·자동실행으로 부를 때 「현재 폴더」가 서로 다르기 때문입니다. 이 줄이 없으면 손으로 더블클릭할 땐 잘 되다가, 바탕화면 바로가기나 예약 실행에서만 「파일을 찾을 수 없습니다」가 납니다. 프로그램이 고장 난 줄 알고 한참 헤맸는데 원인은 이 한 줄이었습니다.

py -X utf8 main.py — 파이썬 파일을 실행합니다. -X utf8은 한글을 다루게 해주는 옵션입니다.

참고로 python이 아니라 py를 쓰는 게 안전합니다. 윈도우에서는 python을 치면 마이크로소프트 스토어가 열리면서 "Python was not found"가 뜨는 경우가 있습니다. 제 컴퓨터가 그렇습니다.

창이 순식간에 닫혀서 아무것도 못 읽을 때

더블클릭했더니 검은 창이 번쩍하고 사라집니다. 처음엔 실패한 줄 알았는데, 대부분은 잘 끝나서 닫힌 것입니다. 할 일을 마치면 창은 자기 역할이 끝나 없어집니다.

메시지를 읽고 싶으면 맨 끝에 한 줄을 더합니다.

@echo off
cd /d "%~dp0"
py -X utf8 main.py
pause

pause"아무 키나 누르십시오"를 띄우고 기다립니다. 그동안 화면을 읽으면 됩니다.

다만 매일 도는 프로그램에 pause를 넣어두면 창이 계속 열린 채로 쌓입니다. 그래서 제 실거래 프로그램은 이렇게 되어 있습니다.

@echo off
cd /d %~dp0
py main.py 2> error_log.txt
if %errorlevel% neq 0 (
    type error_log.txt
    echo.
    pause
)

2> error_log.txt에러 메시지를 파일로 받아두는 부분이고, 아래 if실패했을 때만 그 내용을 보여주고 창을 세워둡니다. 잘 끝나면 조용히 닫힙니다.

이렇게 해두면 나중에 클로드에게 그 error_log.txt를 읽어보라고 하면 됩니다. 저는 에러 메시지를 읽을 줄 모르지만, 파일로 남겨두기만 하면 그다음은 말로 해결됩니다.

한글이 깨질 때 — 한 가지만 하면 더 깨집니다

화면에 한글이 ?슈/?워드 입력처럼 나오는 일이 있습니다. 검색해보면 대개 이 줄을 넣으라고 합니다.

chcp 65001 > nul

「이 창에서는 한글을 UTF-8로 다루겠다」는 선언입니다. 맞는 처방인데, 절반만 하면 오히려 더 깨집니다.

선언만 해놓고 파일 자체는 옛 방식으로 저장돼 있으면, 컴퓨터가 그 뒤 줄들을 잘못 읽습니다. 그러면 한글이 깨지는 데서 그치지 않고 바로 옆의 명령어까지 같이 망가집니다.

이게 남 얘기가 아닙니다. 오늘 제 폴더의 배치파일 64개를 전부 세어봤습니다.

상태 개수
한글이 아예 없음 (가장 안전) 37개
한글이 있고 UTF-8로 제대로 저장됨 20개
한글이 깨진 채 저장됨 7개

깨진 7개 중 6개에는 그 chcp 65001이 들어 있었습니다. 선언은 해놓고 저장은 안 맞춘, 정확히 그 상태입니다. 그중 3개는 깨진 글자가 실행할 때 화면에 그대로 나옵니다. 이 글을 쓰려고 오늘 세어보기 전까지 몰랐습니다.

그래서 정리하면 이렇습니다. 한글을 쓸 거면 chcp 65001과 「UTF-8로 저장」을 반드시 같이 하고, 둘 다 못 하겠으면 차라리 한글을 안 쓰는 게 낫습니다. 제 파일 37개가 영문만 쓰는데, 그것들은 한 번도 이 문제를 낸 적이 없습니다.

검은 창 없이 프로그램만 띄우기

화면이 있는 프로그램(GUI)을 만들었다면, 뒤에 검은 창이 계속 남아 있는 게 거슬립니다. 그때는 이렇게 씁니다.

@echo off
cd /d "%~dp0"
start "" pyw gui.py

pyw검은 창 없이 파이썬을 돌리는 짝꿍이고, start ""기다리지 말고 바로 넘어가라는 뜻입니다. 둘을 같이 쓰면 프로그램 창만 뜨고 배치파일은 조용히 사라집니다.

앞의 빈 따옴표 ""가 어색해 보이는데, 저 자리는 원래 창 제목을 넣는 자리라 비워두는 것입니다. 빼면 엉뚱하게 동작할 때가 있습니다.

배치파일 증상별 처방 네 가지

매일 자동으로 돌리려 할 때 — 여기서 두 번 크게 당했습니다

배치파일을 만들고 나면 다음 욕심이 납니다. 내가 안 눌러도 정해진 시각에 알아서 돌게 하고 싶어집니다. 윈도우의 「작업 스케줄러」에 이 배치파일을 걸면 됩니다.

그런데 여기서 두 번 크게 당했습니다. 둘 다 「에러가 안 나는데 잘못 도는」 종류라 발견이 늦었습니다.

첫 번째 — 아무것도 안 돌고 로그도 안 남았습니다. 예약 실행이 실패했다고 뜨는데 로그 파일은 한 줄도 비어 있었습니다. 손으로 더블클릭하면 잘 되니 더 헷갈렸습니다.

원인은 방금 말한 그 한글 문제였습니다. 파일 첫머리의 한글이 깨지면서 바로 아래 명령어까지 같이 망가져, 첫 줄을 실행하기도 전에 죽은 것이었습니다. 로그를 남기는 명령 자체에 도달하지 못했으니 로그가 없는 게 당연했습니다. 예약 실행에 거는 배치파일은 아예 영문만 쓰는 게 안전합니다.

두 번째 — 주말에 쉬라고 걸어둔 장치가 항상 열려 있었습니다. 주식은 토·일에 안 열리니 주말엔 건너뛰게 해두었는데, 토요일에도 일요일에도 그대로 돌아가고 있었습니다. 에러는 한 번도 안 났습니다.

범인은 부등호 하나였습니다. 「요일이 5보다 작으면 평일」이라는 조건을 배치파일 안에 한 줄로 적었는데, 그 안의 <를 윈도우가 「5번 파일에서 내용을 읽어오라」는 명령으로 해석해버린 것입니다. 조건문이 통째로 부서졌고, 하필 부서진 방향이 「항상 통과」였습니다.

배치파일에서는 < > | 같은 기호가 따옴표로 감싸도 특별한 뜻으로 먼저 읽힙니다. 그래서 지금은 판단하는 부분을 별도의 파이썬 파일로 빼두고, 배치파일에서는 그 파일을 부르기만 합니다. 기호가 없으니 오해할 여지도 없습니다.

여기서 배운 건 기술보다 태도 쪽입니다. 예약 실행은 잘 돌고 있는지를 스스로 알려주지 않습니다. 「돌았겠지」가 아니라 로그가 실제로 쌓이는지를 한 번은 눈으로 봐야 합니다.

세 줄에서 시작했습니다

지금은 이 배치파일들이 장 시작 전에 데이터를 받고, 장중에 프로그램을 띄우고, 장이 끝나면 브리핑을 만들어 보냅니다. 그 전부가 메모장으로 적은 세 줄에서 시작했습니다.

그리고 이 글의 내용 중에 제가 미리 알고 있던 건 하나도 없습니다. 창이 닫히면 왜 닫히는지 물었고, 한글이 깨지면 깨진 화면을 그대로 보여줬고, 주말에 돌아간 걸 발견하고는 "토요일에 왜 돌았지"라고 물었을 뿐입니다. 배치파일 문법을 공부한 적은 없습니다.

혹시 클로드 코드를 아직 안 깔아보셨다면 터미널 없이 설치하는 방법부터 보시면 됩니다.

※ 이 글은 윈도우 기준입니다. 명령어와 옵션은 윈도우 버전·파이썬 설치 방식에 따라 다를 수 있으니, 그대로 안 되면 화면에 나온 메시지를 그대로 클로드에게 보여주시는 편이 빠릅니다.