原標題為「Java 發送郵件」,但實際內容是 Windows 批次檔利用 at 命令排程關機。本文整理該腳本邏輯,說明如何設定每日/每週定時關機,並提供更現代的替代方案。
@echo off
if not "%times%"=="" (
for %%i in (%times%) do (
at %%i /every:M,T,W,Th,F,S,Su shutdown -s
)
)
%times%:預期為外部傳入的時間參數,格式如 22:00 或 22:00,06:00/every:M,T,W,Th,F,S,Su:每週一至日皆執行shutdown -s:關機命令at 22:30 shutdown -s
在今天 22:30 執行關機。
建立 auto_shutdown.bat:
@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
echo 用法: auto_shutdown.bat "時間1,時間2,..."
echo 範例: auto_shutdown.bat "22:00,06:30"
exit /b
)
set "times=%~1"
for %%t in (%times%) do (
echo 排程關機時間: %%t
at %%t /every:M,T,W,Th,F,S,Su shutdown -s
)
echo 已建立排程任務,使用 "at" 指令查看,"at /delete /yes" 刪除所有。
執行:auto_shutdown.bat "23:00,07:00"
at 列出所有排程任務
at 1 顯示 ID 1 的任務詳情
at 1 /delete 刪除 ID 1
at /delete /yes 刪除所有任務 (需確認)
at,改用 schtasks 或工作排程器 GUIschtasks /create /tn "AutoShutdown" /tr "shutdown -s" /sc daily /st 22:30 /ru SYSTEM /rl HIGHEST
/sc daily:每日;/sc weekly 每週;/sc monthly 每月/st 22:30:開始時間/ru SYSTEM:以系統帳號執行 (無需登入)/rl HIGHEST:最高權限shutdown.exe,引數:-s -t 0shutdown -s 關機
shutdown -r 重新開機
shutdown -h 休眠
shutdown -t 60 60 秒後執行 (預設 30 秒)
shutdown -a 取消已排程的關機/重開機
shutdown -f 強制關閉應用程式 (配合 -s 使用)
雖然 at 命令簡單,但已被淘汰。生產環境請使用 schtasks 或 **工作排程器 GUI**,功能更強、相容性更好、支援匯出/匯入 XML 實現基礎設施即代碼 (IaC)。