批處理定時關機

飞雪飘鸿發表於2024-04-30
@echo off
REM Author: YooooungLee TEL 155-****-9552

echo 歡迎使用自動關機計劃設定指令碼!
echo.

:choose_action
set /p "action_choice=請選擇要執行的操作(輸入1設定定時關機任務,輸入2刪除定時關機任務):"

if "%action_choice%"=="1" (
    echo.
    echo -- 設定定時關機任務 --
    echo.
    REM 設定定時關機任務指令碼
    goto set_shutdown_task
)

if "%action_choice%"=="2" (
    echo.
    echo -- 刪除定時關機任務,如提示“錯誤:拒絕訪問”,請退出後,以管理員許可權重新執行程式 --
    echo.
    REM 刪除定時關機任務指令碼
    goto delete_shutdown_task
)

echo 錯誤:無效的選項,請輸入1或2來選擇操作。
echo.
pause
goto choose_action

:set_shutdown_task
:: 之前完成的設定定時關機任務的指令碼
setlocal enabledelayedexpansion

:input_time
set /p shutdown_time=請輸入每日關機時間(格式為HH:mm,例如 20:00 表示晚上8點):

rem 檢查輸入的時間格式是否正確
for /f "tokens=1,2 delims=:" %%a in ("%shutdown_time%") do (
    set "hour=%%a"
    set "minute=%%b"
)

rem 檢查小時和分鐘是否都是數字
echo %hour% | findstr /r "[0-9]" >nul
if %errorlevel% neq 0 (
    echo 錯誤:輸入的時間格式不正確,請重新輸入。
    goto input_time
)
echo %minute% | findstr /r "[0-9]" >nul
if %errorlevel% neq 0 (
    echo 錯誤:輸入的時間格式不正確,請重新輸入。
    goto input_time
)

rem 檢查小時和分鐘是否在合法範圍內(小時:00到23,分鐘:00到59)
if %hour% lss 0 (
    echo 錯誤:輸入的小時值不能小於0,請重新輸入。
    goto input_time
)
if %hour% gtr 23 (
    echo 錯誤:輸入的小時值不能大於23,請重新輸入。
    goto input_time
)
if %minute% lss 0 (
    echo 錯誤:輸入的分鐘值不能小於0,請重新輸入。
    goto input_time
)
if %minute% gtr 59 (
    echo 錯誤:輸入的分鐘值不能大於59,請重新輸入。
    goto input_time
)

echo 正在設定每日 %shutdown_time% 自動關機...
echo 請勿關閉此視窗,否則設定將失效.

:: 刪除之前設定的同名自動關機任務(如果存在)
schtasks /delete /tn "每日自動關機" /f >nul 2>&1

:: 建立新的自動關機任務
schtasks /create /tn "每日自動關機" /tr "shutdown /s /f /t 0" /sc daily /st %shutdown_time%

echo 每日 %shutdown_time% 自動關機任務設定完畢。
echo 可以雙擊此指令碼再次設定計劃任務或手動刪除計劃任務。
pause
goto :EOF

:delete_shutdown_task
:: 刪除定時關機任務的指令碼
echo 正在刪除之前設定的每日自動關機任務...
schtasks /delete /tn "每日自動關機" /f
echo 已刪除之前設定的每日自動關機任務。
pause
goto :EOF

  

相關文章