카테고리 없음

배치 파일 실전(9): "이게 정말 메모장으로 만든 거야?" 나만의 올인원 PC 관리 프로그램 만들기 (메뉴 시스템 구축)

스워플 2026. 2. 7. 23:47

우리는 지금까지 9번의 포스팅을 통해 윈도우 배치 파일의 강력함을 경험했습니다. 이제 여러분의 컴퓨터에는 '청소용', '백업용', '정리용' 등 여러 개의 .bat 파일이 흩어져 있을 것입니다. 오늘은 이 조각들을 하나로 모아, 그럴듯한 **'메인 메뉴 시스템'**을 구축해 보려 합니다.

개발자가 아니더라도 괜찮습니다. GOTO와 IF문, 단 두 가지 개념만 이해하면 영화 속 해커가 사용할 법한 멋진 인터페이스의 프로그램을 직접 설계할 수 있습니다. 이것은 단순한 스크립트 작성을 넘어, '사용자 경험(UX)'을 고려한 프로그래밍의 첫걸음이 될 것입니다.


1. 인터랙티브 메뉴 시스템의 핵심 원리

배치 파일이 그냥 꺼지는 것이 아니라, 계속 떠 있으면서 사용자의 입력을 기다리게 하려면 '무한 루프(Loop)' 구조가 필요합니다.

  1. 화면 그리기 (CLS, ECHO): 화면을 깨끗이 지우고 메뉴 목록을 보여줍니다.
  2. 입력 받기 (SET /P): 사용자가 키보드로 선택지(1, 2, 3...)를 입력할 때까지 대기합니다.
  3. 분기 처리 (IF, GOTO): 입력된 숫자에 따라 해당 기능을 수행하는 구역(Label)으로 점프합니다.
  4. 복귀 (GOTO MENU): 기능 수행이 끝나면 프로그램이 종료되는 것이 아니라, 다시 처음 메뉴 화면으로 돌아옵니다.

2. [실전 프로젝트] 마스터 유틸리티 'My_PC_Manager' 만들기

지금까지 배운 기능 중 가장 유용한 것들을 모아 [1. 시스템 청소], [2. 파일 정리], [3. 네트워크 초기화], [4. 시스템 종료 예약] 기능을 담은 통합 툴을 만들어 보겠습니다.

마스터 스크립트 코드 작성

메모장을 열고 아래 코드를 작성하세요. 이번 코드는 조금 길지만, 구조를 파악하면 매우 단순합니다.

코드 스니펫
 
@echo off
chcp 65001 >nul
title My PC Master Tool v1.0
mode con: cols=60 lines=30
color 0B

:Menu
cls
echo.
echo ==========================================================
echo        My Personal PC Manager (v1.0)
echo ==========================================================
echo.
echo    [1] PC 최적화 (임시 파일 청소)
echo    [2] 다운로드 폴더 정리 (이미지 분류)
echo    [3] 인터넷 연결 초기화 (DNS 플러시)
echo    [4] 시스템 종료 예약 (1시간 뒤)
echo    [5] 예약 종료 취소
echo.
echo    [Q] 프로그램 종료
echo.
echo ==========================================================
echo.

:: 사용자 입력 대기 (변수명: choice)
set /p choice=▶ 원하시는 작업의 번호를 입력하세요: 

:: 입력값에 따른 분기 처리
if "%choice%"=="1" goto SystemClean
if "%choice%"=="2" goto FileSort
if "%choice%"=="3" goto NetReset
if "%choice%"=="4" goto AutoShutdown
if "%choice%"=="5" goto CancelShutdown
if /i "%choice%"=="Q" goto ExitProgram

:: 잘못된 입력 처리
echo.
echo [경고] 잘못된 입력입니다. 다시 선택해주세요.
timeout /t 2 >nul
goto Menu


:: ==========================================================
:: [기능 1] 시스템 청소 섹션
:: ==========================================================
:SystemClean
cls
echo [진행] 시스템 임시 파일을 정리합니다...
echo.
del /q /f /s "%temp%\*" >nul 2>&1
echo [완료] 임시 폴더가 깨끗해졌습니다.
echo.
pause
goto Menu


:: ==========================================================
:: [기능 2] 파일 분류 섹션
:: ==========================================================
:FileSort
cls
echo [진행] 다운로드 폴더의 이미지를 정리합니다...
set "target=%userprofile%\Downloads"
cd /d "%target%"
if not exist "Images" mkdir "Images"
move *.jpg "Images" >nul 2>&1
move *.png "Images" >nul 2>&1
echo [완료] 이미지 파일 이동이 끝났습니다.
echo.
pause
goto Menu


:: ==========================================================
:: [기능 3] 인터넷 초기화 섹션
:: ==========================================================
:NetReset
cls
echo [진행] DNS 캐시를 초기화하고 IP를 재설정합니다...
ipconfig /flushdns
echo.
echo [완료] 인터넷 연결 상태를 점검했습니다.
echo.
pause
goto Menu


:: ==========================================================
:: [기능 4, 5] 종료 예약 및 취소 섹션
:: ==========================================================
:AutoShutdown
cls
echo [예약] 1시간(3600초) 뒤 컴퓨터를 종료합니다.
shutdown /s /t 3600
echo.
pause
goto Menu

:CancelShutdown
cls
echo [취소] 예약된 시스템 종료를 취소합니다.
shutdown /a
echo.
pause
goto Menu


:: ==========================================================
:: [종료] 프로그램 종료 섹션
:: ==========================================================
:ExitProgram
cls
echo.
echo 프로그램을 이용해 주셔서 감사합니다.
echo 3초 후 자동으로 닫힙니다.
timeout /t 3 >nul
exit

3. 코드의 구조적 미학 (E-E-A-T 전문성 포인트)

이 스크립트는 단순한 명령어 나열이 아닌, **'구조적 프로그래밍'**의 형태를 띠고 있습니다.

(1) 라벨(:Label)을 이용한 구역 나누기

코드를 보면 :Menu, :SystemClean, :FileSort와 같이 콜론(:)으로 시작하는 단어들이 보입니다. 이를 **라벨(Label)**이라고 합니다. 책갈피와 같은 역할로, goto 명령어는 이 책갈피를 찾아 순식간에 이동합니다.

(2) 무한 루프와 goto Menu

각 기능(섹션)의 마지막을 보면 공통적으로 goto Menu가 적혀 있습니다. 작업을 마친 뒤 프로그램을 끄지 않고, 다시 메인 메뉴 화면(:Menu)으로 돌아가게 함으로써 사용자가 연속적인 작업을 할 수 있도록 설계했습니다. 이것이 바로 메뉴 시스템의 핵심입니다.

(3) 시각적 요소 강화 (mode, color)

  • mode con: cols=60 lines=30: 프로그램이 실행될 때 창의 크기를 가로 60칸, 세로 30줄로 고정합니다. 사용자에게 안정된 UI를 제공합니다.
  • color 0B: 검은 배경(0)에 밝은 하늘색 글씨(B)를 적용하여, 칙칙한 CMD 화면을 미래지향적인 느낌으로 바꿉니다.

(4) 입력 유효성 검사 (Validation)

사용자가 1~5가 아닌 엉뚱한 키를 눌렀을 때 프로그램이 오작동하거나 꺼지는 것을 방지하기 위해, if문 아래에 "잘못된 입력입니다"라는 경고 메시지를 띄우고 다시 메뉴로 돌아가게(goto Menu) 하는 안전장치를 마련했습니다.


4. 확장 가능성: 나만의 기능 추가하기

이 뼈대(Framework)만 있다면 기능 추가는 식은 죽 먹기입니다.

  1. 메뉴에 줄 추가: echo [6] 새로운 기능을 적습니다.
  2. 분기 추가: if "%choice%"=="6" goto NewFeature를 적습니다.
  3. 기능 구현: 코드 맨 아래에 :NewFeature 라벨을 만들고 원하는 명령어(예: 백업, 복사 등)를 적은 뒤 goto Menu로 닫아주면 끝입니다.

이런 식으로 기능을 10개, 20개 늘려가며 나만의 **'전지전능한 PC 관리 비서'**를 키워나갈 수 있습니다.


5. 시리즈를 마치며: 자동화가 가져다주는 자유

총 10회에 걸친 [윈도우 배치 파일 완전 정복] 시리즈를 통해, 우리는 윈도우의 가장 깊은 곳에 있는 원시적인 도구를 이용해 최첨단 생산성을 만들어내는 법을 배웠습니다.

  • 단순 반복 작업에서 해방되었고,
  • 실수로 인한 데이터 손실을 막는 백업 시스템을 구축했으며,
  • 이제는 나만의 소프트웨어를 만드는 단계까지 왔습니다.

배치 파일은 화려한 그래픽은 없지만, '가장 빠르고', '가장 가볍고', '어디서든 실행 가능한' 강력한 무기입니다. 이 시리즈가 여러분의 칼퇴근을 돕고, 디지털 라이프를 더 쾌적하게 만드는 데 작은 보탬이 되었기를 바랍니다.

이 코드를 바탕으로 여러분만의 창의적인 아이디어를 더해 더 멋진 프로그램을 만들어 보세요. 여러분의 첫 번째 프로그램 완성을 축하드립니다!