컴퓨터/Batch

Batch (1) - 특정 시간 종료 후 컴퓨터가 꺼지는 배치 파일 제작하기

달서비 2022. 2. 28. 16:27

지난번에 원격으로 컴퓨터를 구동할 때 한 가지 문제를 생각 못했습니다. 바로 전원을 꺼지게 만들어야 하는데 부족했습니다. 그래서 해당 이슈를 해결하기 위하여 배치파일을 누르면 컴퓨터를 종료시키도록 만들어보겠습니다.

CMD - pngwing

Shutdown 명령어

shutdown /s

우선 shutdown명령어는 여러 가지 인수들이 있는데 필자가 많이 쓰는 인자는 다음과 같습니다.

/s 컴퓨터를 종료한다.
/r 컴퓨터를 재부팅한다.
/f 컴퓨터의 "강제" 모든창을 내린다. (로그오프)
/t 일정시간후 shutdown명령을 실행한다.
/a 시간설정을 해제한다.

만약에 배치파일로 단한줄로 10초 후 컴퓨터를 완전하게 종료한다고 하면 다음의 명령어를 치면 됩니다.

shutdown /s /f /t 10

※ 참고로 배치파일을 만드는 법은 메모장에 명령어 입력 후 .bat로 파일을 저장하면 됩니다.

 

하지만 저는 한줄로만 입력하는 것도 좋지만 cli화면에 종료하겠다고 표시하는 것도 좋지 않을까 생각했고 약간의 CMD 공부를 하였습니다.

그리하여  cmd에 goto문이 있는 것을 알았고 이것을 활용하기로 하였습니다.

 

CMD창에 남은 시간이 보이게 화면 종료를 만들자 

@echo off
chcp 65001
cls

set /a Sec = 10

:_loop
	echo ---------------------------
	echo %Sec%초 뒤에 컴퓨터를 종료합니다.
	echo ---------------------------
	timeout /t 1 >NUL
	set /a Sec -= 1
	if %Sec%==0 (goto _break)
	cls
goto _loop

:_break

cls
echo ---------------------------
echo 컴퓨터를 종료합니다.
echo ---------------------------
timeout /t 1 >NUL
shutdown /s /f

해당 소스코드에 대하여 주석을 달자면 다름과 같습니다.

  • @echo off를 통하여 명령어가 눌리는 게 안 보이게 된다.
  • set /a 명령어는 변수를 선언한다.
  • goto문을 통하여 루프를 돌고 변수의 값이 0이 되는 경우 창을 탈출한다. (예전에 언어들은 goto문이 있었는데 어느 순간부터 빠지게 되었다....)
  • cls를 통하여 cmd창을 초기화한다.
  • timeout 명령어를 통하여 1초간 딜레이 한다.

 

결과 화면

이후에 명령이 종료되지만 진짜로 컴퓨터가 꺼지므로.. 찍지는 못하였습니다.

 

사실 윈도우가 gui에 친숙한 언어라서 cli 기반에서는 약하지만 그래도 어느 정도 편의를 위하여 어느정도 만들었습니다.