Windows 定時休眠 睡眠 批處理命令
阿新 • • 發佈:2019-01-12
@echo off
cd /d %~dp0
set ZT=[睡眠/休眠]
set ZT0=[關機]
set ZX=OVER1
set ZX0=OVER2
set P=[執行中]
:begin
cls
title 執行%ZT%的設定
set /a TH0=%time:~0,2%
if %TH0% LSS 10 (
set TH0=10%TH0%) else (
set /a TH0=1%TH0%
)
set /a TM0=1%time:~3,2%
set /a TH2=%TH0%
set /a TM2=%TM0%+30
if %TM2% GEQ 160 set /a TH2=%TH2%+1&set /a TM2=%TM2%-60
if %TH2% GEQ 124 set /a TH2=%TH2%-24
set /a TH3=%TH0%+1
set /a TM3=%TM0%
if %TM3% GEQ 160 set /a TH3=%TH3%+1&set /a TM3=%TM3%-60
if %TH3% GEQ 124 set /a TH3=%TH3%-24
set /a TH4=%TH0%+1
set /a TM4=%TM0%+30
if %TM4% GEQ 160 set /a TH4=%TH4%+1&set /a TM4=%TM4%-60
if %TH4% GEQ 124 set /a TH4=%TH4%-24
set /a TH5=%TH0%+2
set /a TM5=%TM0%
if %TM5% GEQ 160 set /a TH5=%TH5%+1&set /a TM5=%TM5%-60
if %TH5% GEQ 124 set /a TH5=%TH5%-24
set /a TH6=%TH0%+2
set /a TM6=%TM0%+30
if %TM6% GEQ 160 set /a TH6=%TH6%+1&set /a TM6=%TM6%-60
if %TH6% GEQ 124 set /a TH6=%TH6%-24
set /a TH7=%TH0%+3
set /a TM7=%TM0%
if %TM7% GEQ 160 set /a TH7=%TH7%+1&set /a TM7=%TM7%-60
if %TH7% GEQ 124 set /a TH7=%TH7%-24
set /a TH8=%TH0%+3
set /a TM8=%TM0%+30
if %TM8% GEQ 160 set /a TH8=%TH8%+1&set /a TM8=%TM8%-60
if %TH8% GEQ 124 set /a TH8=%TH8%-24
echo 請選擇計劃進入%ZT%:
echo [1]=0:30後預計於[%TH2:~1%:%TM2:~1%]執行
echo [2]=1:00後預計於[%TH3:~1%:%TM3:~1%]執行
echo [3]=1:30後預計於[%TH4:~1%:%TM4:~1%]執行
echo [4]=2:00後預計於[%TH5:~1%:%TM5:~1%]執行
echo [5]=2:30後預計於[%TH6:~1%:%TM6:~1%]執行
echo [6]=3:00後預計於[%TH7:~1%:%TM7:~1%]執行
echo [7]=3:30後預計於[%TH8:~1%:%TM8:~1%]執行
echo [8]=自定義時間
echo ---------------------------------
echo [9]=進入%ZT0%計劃
echo [0]=調換進入[睡眠]或[休眠]
echo ---------------------------------
echo 注:預計時間以[%TH0:~1,2%:%TM0:~1,2%]開始計算
set choice=輸入
set /p choice=
if %choice%==1 set /a H=100 & set /a M=130&goto run
if %choice%==2 set /a H=101 & set /a M=100&goto run
if %choice%==3 set /a H=101 & set /a M=130&goto run
if %choice%==4 set /a H=102 & set /a M=100&goto run
if %choice%==5 set /a H=102 & set /a M=130&goto run
if %choice%==6 set /a H=103 & set /a M=100&goto run
if %choice%==7 set /a H=103 & set /a M=130&goto run
if %choice%==8 goto setmode
if %choice%==9 set ZT0=%ZT%&set ZT=%ZT0%&set ZX0=%ZX%&set ZX=%ZX0%&goto begin
if %choice%==0 goto SW
set choice0=1234567890
echo %choice%|findstr "[^^%choice0%]">nul&&(echo 沒有%choice%選項!&choice /t 1 /d y /n >nul&goto begin)
echo %choice%|findstr "^0">nul 2>nul&&(echo 沒有%choice%選項!&&choice /t 1 /d y /n >nul&goto begin)
if %choice% GTR 9 echo 沒有%choice%選項!&choice /t 1 /d y /n >nul&goto begin
:SW
cls
echo 請選擇:
echo ---------------------------------------------------------------
echo [1]=改為[睡眠](記憶體不斷電啟動快但主機板需要供電維持)
echo [2]=改為[休眠](記憶體轉儲硬碟啟動慢但不需要供電維持)
echo [3]=提升管理員許可權(或退出後在程式上右鍵選"以管理員身份執行")
echo [0]=返回主選單
echo ---------------------------------------------------------------
echo 注:此處的更改需要管理員許可權才能生效且所做選擇會被系統儲存,之後選擇[睡眠/休眠]計劃會相應的進入睡眠或休眠
echo 系統預設設定為休眠,改為睡眠時win10系統在電源管理中"關機設定"裡的快速啟動功能不會顯示不會起效,改為休眠時恢復顯示和功能(引用系統自帶功能請放心)
set choice=輸入
set /p choice=
if %choice%==1 goto SWOFF
if %choice%==2 goto SWON
if %choice%==3 goto GETAD
if %choice%==0 goto begin
set choice0=1230
echo %choice%|findstr "[^^%choice0%]">nul&&(echo 沒有%choice%選項!&choice /t 1 /d y /n >nul&goto SW)
echo %choice%|findstr "^0">nul 2>nul&&(echo 沒有%choice%選項!&&choice /t 1 /d y /n >nul&goto SW)
if %choice% GTR 9 echo 沒有%choice%選項!&choice /t 1 /d y /n >nul&goto SW
:SWOFF
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 powercfg -h off&echo 修改完成&pause&goto SW
echo 設定此項需要先提升管理員許可權(或退出後在程式上右鍵選"以管理員身份執行")
pause
goto SW
:SWON
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 powercfg -h on&echo 修改完成&pause&goto SW
echo 設定此項需要先提升管理員許可權(或退出後在程式上右鍵選"以管理員身份執行")
pause
goto SW
:GETAD
cd /d %~dp0
cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
if %errorlevel%==0 goto Admin
if exist "快取可刪除.vbs" del /f /q "快取可刪除.vbs"
echo Set RequestUAC = CreateObject^("Shell.Application"^)>"快取可刪除.vbs"
echo RequestUAC.ShellExecute "%~s0","","","runas",1 >>"快取可刪除.vbs"
echo WScript.Quit >>"快取可刪除.vbs"
"快取可刪除.vbs" /f
if exist "快取可刪除.vbs" del /f /q "快取可刪除.vbs"
exit
:Admin
echo 已經是管理員身份!
pause
goto SW
:setmode
cls
echo [1]=以倒計時%ZT%
echo [2]=以點時間%ZT%
echo [0]=返回主選單
set /p choice=
if %choice%==1 goto settime1
if %choice%==2 goto settime3
if %choice%==0 goto begin
set choice0=120
echo %choice%|findstr "[^^%choice0%]">nul&&(echo 沒有%choice%選項!&choice /t 1 /d y /n >nul&goto setmode)
echo %choice%|findstr "^0">nul 2>nul&&(echo 沒有%choice%選項!&&choice /t 1 /d y /n >nul&goto setmode)
if %choice% GTR 9 echo 沒有%choice%選項!&choice /t 1 /d y /n >nul&goto setmode
:settime1
cls
set /a min=0
set H=輸入
echo 以倒計時%ZT%:
echo (__:__)請輸入倒計時的小時數(0-23)
echo [X]或[x]=返回上一級
set /p H=
if %H%==X goto setmode
if %H%==x goto setmode
set choice0=1234567890
echo %H%|findstr "[^^%choice0%]">nul&&(echo 請輸入正確的正整數值&choice /t 1 /d y /n >nul&goto settime1)
if %H%==0 set /a min=1&goto contH
echo %H%|findstr "^0">nul 2>nul&&(echo 不需要輸入"0"作為開頭佔位&&choice /t 1 /d y /n >nul&goto settime1)
:contH
if %H% GEQ 24 echo 請輸入提示範圍以內的計時時間&choice /t 1 /d y /n >nul&goto settime1
if %H% LSS 10 (
set /a H=10%H%) else (
set /a H=1%H%
)
:settime2
cls
set M=輸入
echo 以倒計時%ZT%:
echo (%H:~1%:__)請輸入倒計時的分鐘數(%min%-59)
echo [X]或[x]=返回上一級
set /p M=
if %M%==X goto setmode
if %M%==x goto setmode
set choice0=1234567890
echo %M%|findstr "[^^%choice0%]">nul&&(echo 請輸入正確的正整數值&choice /t 1 /d y /n >nul&goto settime2)
if %M%==0 goto Z
echo %M%|findstr "^0">nul 2>nul&&(echo 不需要輸入"0"作為開頭佔位&&choice /t 1 /d y /n >nul&goto settime2)
:contM
set /a M=%M%
if %M% GEQ 60 echo 請輸入提示範圍以內的計時時間&choice /t 1 /d y /n >nul&goto settime2
if %M% LSS 10 (
set /a M=10%M%) else (
set /a M=1%M%
)
goto run
:Z
if %H%==100 (
echo 請輸入提示範圍以內的計時時間&choice /t 1 /d y /n >nul&goto settime2) else (
goto contM
)
:settime3
cls
set /a min=0
set TH=輸入
echo 以點時間%ZT%:
echo (__:__)請輸入執行時的小時數(0-23)
echo [X]或[x]=返回上一級
set /p TH=
if %TH%==X goto setmode
if %TH%==x goto setmode
set choice0=1234567890
echo %TH%|findstr "[^^%choice0%]">nul&&(echo 請輸入正確的正整數值&choice /t 1 /d y /n >nul&goto settime3)
if %TH%==0 goto contTH
echo %TH%|findstr "^0">nul 2>nul&&(echo 不需要輸入"0"作為開頭佔位&&choice /t 1 /d y /n >nul&goto settime3)
:contTH
if %TH% GEQ 24 echo 請輸入提示範圍以內的計時時間&choice /t 1 /d y /n >nul&goto settime3
if %TH% LSS 10 (
set /a TH=10%TH%) else (
set /a TH=1%TH%
)
:settime4
cls
set TM=輸入
echo 以點時間%ZT%:
echo (%TH:~1%:__)請輸入執行時的分鐘數(0-59)
echo [X]或[x]=返回上一級
set /p TM=
if %TM%==X goto setmode
if %TM%==x goto setmode
set choice0=1234567890
echo %TM%|findstr "[^^%choice0%]">nul&&(echo 請輸入正確的正整數值&choice /t 1 /d y /n >nul&goto settime4)
if %TM%==0 goto contTM
echo %TM%|findstr "^0">nul 2>nul&&(echo 不需要輸入"0"作為開頭佔位&&choice /t 1 /d y /n >nul&goto settime4)
:contTM
set /a TM=%TM%
if %TM% GEQ 60 echo 請輸入提示範圍以內的計時時間&choice /t 1 /d y /n >nul&goto settime4
if %TM% LSS 10 (
set /a TM=10%TM%) else (
set /a TM=1%TM%
)
goto run2
:run
cls
set /a TH0=%time:~0,2%
if %TH0% LSS 10 (
set TH0=10%TH0%) else (
set /a TH0=1%TH0%
)
set /a TM0=1%time:~3,2%
set /a TS=%time:~6,1%
set /a TH=%TH0%+%H%-100
set /a TM=%TM0%+%M%-100
if %TM% GEQ 160 set /a TH=%TH%+1&set /a TM=%TM%-60
if %TH% GEQ 124 set /a TH=%TH%-24
goto FN1
:run2
cls
set /a TH0=%time:~0,2%
if %TH0% LSS 10 (
set /a TH0=10%TH0%) else (
set /a TH0=1%TH0%
)
set /a TM0=1%time:~3,2%
set /a TS=%time:~6,1%
if %TH% GEQ %TH0% (
set /a H=%TH%-%TH0%) else (
set /a H=%TH%+24-%TH0%
)
if %H% LSS 10 (
set /a H=10%H%) else (
set /a H=1%H%
)
if %TM% GEQ %TM0% (
set /a M=%TM%-%TM0%) else (
set /a M=%TM%+60-%TM0%&set /a H=%H%-1
)
if %H%==99 set /a H=123
if %M% LSS 10 (
set /a M=10%M%) else (
set /a M=1%M%
)
if %TH%==%TH0% (
goto CK1) else (
goto FN1
)
:CK1
if %TM%==%TM0% (
goto sp1) else (
goto FN1
)
:sp1
echo 注意!你設定了和當前相同的時間!將退回分鐘設定部分
choice /t 2 /d y /n >nul
goto settime4
:FN1
cls
echo 操作內容:%ZT%
echo 建立時間:[%time:~0,8%]
echo 計時長度:[%H:~1%:%M:~1%:00]
echo 執行時間:[%TH:~1%:%TM:~1%:%TS%4]±4s
echo 需要取消請直接關閉視窗
echo -----------------------------------------------------
echo (視窗標題間隔閃爍"[執行中]"以及操作項時表示執行正常)
echo -----------------------------------------------------
:RE
set P=%ZT%&set ZT=%P%
set /a TM1=1%time:~3,2%
title [%H:~1%:%M:~1%]%P%
choice /t 8 /d y /n >nul
set /a TH0=%time:~0,2%
if %TH0% LSS 10 (
set TH0=10%TH0%) else (
set /a TH0=1%TH0%
)
set /a TM0=1%time:~3,2%
set /a TS0=%time:~6,1%
if %TS0%==%TS% goto A
goto reM
:A
if %TM0%==%TM% goto B
goto reM
:B
if %TH0%==%TH% goto %ZX%
:reM
if %M%==100 goto reH
if %TM0%==%TM1% goto RE
set /a M=%M%-1
goto RE
:reH
if %H%==100 goto RE
set /a H=%H%-1&set /a M=159
goto RE
:OVER1
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
exit
echo 一下內容為測試項為了不真正關機或休眠
echo 已經休眠,任意鍵退出
echo 預計執行時間:[%TH:~1%:%TM:~1%:%TS%4](±4s)
echo 實際執行時間:[%time:~0,8%]
pause
exit
:OVER2
shutdown -s -t 1
exit
echo 一下內容為測試項為了不真正關機或休眠
echo 已經關機,任意鍵退出
echo 預計執行時間:[%TH:~1%:%TM:~1%:%TS%4](±4s)
echo 實際執行時間:[%time:~0,8%]
pause
exit
%備註可刪除↓%
+100
TH0最新時間快取
TM0
TH執行時間
TM
H
M
TM1最新時間 有時間差快取
%備註可刪除↑%