1. 程式人生 > >Windows 定時休眠 睡眠 批處理命令

Windows 定時休眠 睡眠 批處理命令

Github下載地址

@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%44s 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最新時間 有時間差快取 %備註可刪除↑%