다운로드가 끝나면 자동으로 끄기, 밤샘 작업을 돌려놓고 종료하기.
이럴 때 쓰는 것이 윈도우 예약종료입니다.
이 글에서는 매번 초를 계산할 필요 없이 초·분·시간을 메뉴에서 골라 예약하는 배치파일(.bat)을 만듭니다.
잘못된 입력은 걸러내고, 취소 기능까지 갖춘 완결형 코드입니다.
1. shutdown 명령어 기본
윈도우 예약종료의 핵심은 shutdown 명령어 하나입니다.
명령 프롬프트(cmd)에 다음과 같이 입력하면 지정한 시간 뒤에 PC가 꺼집니다.
shutdown /s /f /t 3600
위 명령은 3600초(1시간) 후 실행 중인 프로그램을 강제 종료하며 PC를 끕니다.
자주 쓰는 옵션은 다음과 같습니다.
| 옵션 | 의미 |
|---|---|
/s |
컴퓨터 종료 |
/t 초 |
종료까지 남은 시간 (초 단위) |
/f |
실행 중인 프로그램 강제 종료 |
/a |
예약된 종료 취소 |
/t 뒤의 시간은 항상 초 단위입니다.
30분은 1800, 1시간은 3600, 2시간은 7200으로 직접 환산해야 합니다.
2. 단순 명령의 불편함: 왜 배치파일인가
shutdown /s /t 3600 한 줄이면 예약은 됩니다.
하지만 막상 쓰다 보면 불편한 점이 있습니다.
- 시간을 매번 초로 환산해야 합니다 (3시간이면 10800을 암산).
- 숫자를 잘못 입력해도 그대로 실행되어 엉뚱한 시간에 종료될 수 있습니다.
- 취소 명령(
shutdown /a)을 따로 기억해야 합니다.
그래서 초·분·시간을 메뉴에서 선택하고, 입력값을 검증한 뒤 자동으로 초로 환산해 주는 배치파일을 만들면 훨씬 편합니다.
3. 전체 배치파일 코드
아래 코드를 메모장에 붙여넣고 예약종료.bat처럼 확장자를 .bat로 저장하면 됩니다.
@ECHO off
SETLOCAL EnableExtensions
TITLE [PC 예약종료 설정]
:Main
CLS
ECHO.
ECHO. PC 예약종료를 설정합니다. 메뉴를 선택해 주세요.
ECHO.
ECHO. 1) PC 예약종료 (초 단위)
ECHO.
ECHO. 2) PC 예약종료 (분 단위)
ECHO.
ECHO. 3) PC 예약종료 (시간 단위)
ECHO.
ECHO. 4) 예약종료 취소
ECHO.
ECHO. 0) EXIT
ECHO.
ECHO.
CHOICE /C 12340 /N /M "메뉴를 선택해 주세요. : "
IF ERRORLEVEL 5 GOTO Quit
IF ERRORLEVEL 4 GOTO MenuCancel
IF ERRORLEVEL 3 GOTO MenuHours
IF ERRORLEVEL 2 GOTO MenuMinutes
IF ERRORLEVEL 1 GOTO MenuSeconds
GOTO Main
:MenuSeconds
CALL :Schedule "초" 1 315360000
GOTO Main
:MenuMinutes
CALL :Schedule "분" 60 5256000
GOTO Main
:MenuHours
CALL :Schedule "시간" 3600 87600
GOTO Main
:MenuCancel
CALL :CancelShutdown
GOTO Main
:Quit
CLS
ECHO. 프로그램을 종료합니다.
EXIT /B 0
:Schedule
SET "unit=%~1"
SET "multiplier=%~2"
SET "max_value=%~3"
SET "set_time="
SET "sec="
CLS
ECHO.
ECHO. 1 이상의 숫자만 입력해 주세요.
ECHO. 최대 입력값: %max_value% %unit%
ECHO.
SET /P "set_time=몇 %unit% 후 PC를 종료하시겠습니까? (%unit% 단위 입력) : "
ECHO.
FOR /F "usebackq delims=" %%S IN (`powershell -NoProfile -ExecutionPolicy Bypass -Command "$v=$env:set_time; $m=[int64]$env:multiplier; $max=[int64]$env:max_value; if ($v -notmatch '^[1-9][0-9]*$') { exit 1 }; $n=[int64]$v; if ($n -gt $max) { exit 2 }; [Console]::Write($n * $m)"`) DO SET "sec=%%S"
IF NOT DEFINED sec (
ECHO. 올바른 숫자를 입력해 주세요.
ECHO.
PAUSE
EXIT /B 0
)
shutdown /s /t %sec%
IF ERRORLEVEL 1 (
ECHO.
ECHO. 예약종료 설정에 실패했습니다.
) ELSE (
ECHO.
ECHO. %sec%초 후 PC가 종료되도록 예약했습니다.
)
ECHO.
PAUSE
EXIT /B 0
:CancelShutdown
CLS
ECHO.
ECHO. PC 예약종료 명령을 취소합니다.
ECHO.
shutdown /a
IF ERRORLEVEL 1 (
ECHO.
ECHO. 취소할 예약종료가 없거나 취소에 실패했습니다.
) ELSE (
ECHO.
ECHO. 예약종료를 취소했습니다.
)
ECHO.
PAUSE
EXIT /B 0
4. 코드 해설
메뉴와 선택 (CHOICE)
CHOICE /C 12340 /N은 1·2·3·4·0 중 한 키만 받습니다.CHOICE는 입력한 문자의 순번을 ERRORLEVEL로 돌려주므로, 큰 번호부터 역순으로 비교하는 것이 핵심입니다.ERRORLEVEL n은 "n 이상"을 뜻하기 때문에, 작은 번호부터 비교하면 모든 조건이 참이 되어 버립니다.
단위 환산 서브루틴 (:Schedule)
초·분·시간 메뉴는 모두 같은 :Schedule 서브루틴을 부르되, 단위 이름·배수·최대값만 다르게 넘깁니다.
| 메뉴 | 단위 | 배수(초 환산) | 최대 입력값 |
|---|---|---|---|
| 1) 초 | 초 | 1 | 315360000 |
| 2) 분 | 분 | 60 | 5256000 |
| 3) 시간 | 시간 | 3600 | 87600 |
배수를 곱해 초로 환산하므로, 사용자는 "3시간"처럼 익숙한 단위로만 입력하면 됩니다.
입력값 검증 (PowerShell)
배치(cmd)만으로는 "양의 정수인지", "최대값을 넘지 않는지"를 검사하기가 까다롭습니다.
그래서 검증과 곱셈만 PowerShell에 위임했습니다.
'^[1-9][0-9]*$'정규식으로 1 이상의 정수인지 확인 (0·공백·문자·소수 차단)- 최대값 초과면 거부
- 통과하면
입력값 × 배수를 초로 출력
검증을 통과하지 못하면 sec 변수가 비어, 아래 IF NOT DEFINED sec 분기에서 "올바른 숫자를 입력해 주세요"로 되돌아갑니다.
검증 로직을 PowerShell로 분리하면 배치파일의 복잡한 IF 중첩 없이도 안전하게 입력을 걸러낼 수 있습니다.
5. 사용법
저장한 .bat 파일을 더블클릭하면 아래처럼 메뉴 화면이 뜹니다.

- 원하는 단위(초·분·시간)의 번호를 누릅니다.
- 종료까지의 시간을 해당 단위로 입력합니다 (예: 시간 메뉴에서
3→ 3시간). - "OO초 후 PC가 종료되도록 예약했습니다" 메시지가 나오면 설정 완료입니다.
예약종료는 저장하지 않은 작업까지 강제로 닫을 수 있습니다./f 옵션은 실행 중인 프로그램을 강제 종료하므로, 중요한 작업은 미리 저장해 두세요.
6. 예약종료 취소
이미 예약한 종료를 취소하려면 메뉴에서 4번을 선택하면 됩니다.
배치파일 없이 직접 취소하려면 명령 프롬프트에 다음을 입력합니다.
shutdown /a
취소할 예약이 없으면 실패 메시지가 나오며, 정상 취소되면 "예약종료를 취소했습니다"가 표시됩니다.
화면을 켜 둔 채 모니터만 끄려면 모니터 화면 끄기 배치파일 만들기를, 자리를 비울 때 PC를 잠그려면 윈도우 화면 잠금 배치파일 만들기를 함께 참고하세요.
'코드보관소 > batch' 카테고리의 다른 글
| 윈도우 화면 잠금 배치파일: LockWorkStation 한 줄로 PC 잠그기 (.bat) (0) | 2026.06.19 |
|---|---|
| 모니터 화면 끄기 배치파일: SendMessage로 화면만 끄기 (.bat) (0) | 2026.06.19 |