|
- @echo off
- if /i "%UserName%" == "SYSTEM" (Goto GotAdmin) else (reg query "HKLM\SYSTEM\ControlSet001\Control\MiniNT" 1>nul 2>nul&&Goto GotAdmin)
- if exist %WinDir%\System32\fltMC.exe fltMC 1>nul 2>nul||mshta VBScript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c """"%~f0""""",,"runas",1)(Window.Close) 2>nul&&Exit /b
- :GotAdmin
- Title 定时关机&Color 2f
- MODE 1>nul 2>nul&&MODE con: Cols=37 Lines=13
- if not exist "%WinDir%\System32\shutdown.exe" if not exist "shutdown.exe" Call :EchoX "cf::找不到 Shutdown.exe 文件!"&Call :CDExit 5&Exit
- Call :EchoX "xx::基于" "2e::Shutdown" "xx.:命令,兼容PE&桌面系统。"&echo  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
- echo.&Call :EchoX " [ " "70::[A]" "xx.: 设置自动关机 ]"
- echo.&Call :EchoX " [ " "70::[C]" "xx.: 取消自动关机 ]"
- echo.&echo __________________
- Call :EchoX "9f::选择选项"&Choice /c AC
- if '%ErrorLevel%' == '1' setlocal enabledelayedexpansion&Set err=0&Set flag=&Goto HInput
- if '%ErrorLevel%' == '2' Shutdown /a 1>nul 2>nul&Cls&Call :EchoX "cf.: 已取消自动关机!"&Call :CDExit 3&Exit
- :HInput
- Cls&if !err! gtr 0 Call :EchoX "cf:: 小时数输入无效,请重新输入!" "cf.:(メ!err!)"
- Call :EchoX "70:: 输入小时[0-23]:"&Set hour=&Set /p hour=
- echo "!hour!"|find "+"&&(Set "hour=!hour:+=!"&Set flag=[+])&(if "!hour:~0,1!" == "0" Set "hour=!hour:~1!")&Call :ChkInput hour 0 23 HInput
- Set err=0
- :MInput
- Cls&Call :EchoX "70:: 输入小时[0-23]:"&echo !hour!时%flag%
- if !err! gtr 0 (Call :EchoX "cf:: 分钟数输入无效,请重新输入!" "cf.:(メ!err!)") else echo.
- Call :EchoX "70:: 输入分钟[0-59]:"&Set minute=&Set /p minute=
- echo "!minute!"|find "+"&&(Set "minute=!minute:+=!"&Set flag=[+])&(if "!minute:~0,1!" == "0" Set "minute=!minute:~1!")&Call :ChkInput minute 0 59 MInput
- Set err=0
- :SInput
- Cls&Call :EchoX "70:: 输入小时[0-23]:"&echo !hour!时%flag%
- echo.&Call :EchoX "70:: 输入分钟[0-59]:"&echo !minute!分%flag%
- if !err! gtr 0 (Call :EchoX "cf:: 秒数输入无效,请重新输入!" "cf.:(メ!err!)") else echo.
- Call :EchoX "70:: 输入秒数[0-59]:"&Set second=&Set /p second=
- echo "!second!"|find "+"&&(Set "second=!second:+=!"&Set flag=[+])&(if "!second:~0,1!" == "0" Set "second=!second:~1!")&Call :ChkInput second 0 59 SInput
- :AutoOff
- Cls&Call :EchoX "70:: 输入小时[0-23]:"&echo !hour!时%flag%
- echo.&Call :EchoX "70:: 输入分钟[0-59]:"&echo !minute!分%flag%
- echo.&Call :EchoX "70:: 输入秒数[0-59]:"&echo !second!秒%flag%
- Set "nowh=%time:~0,2%"&Set "nowm=%time:~3,2%"&Set "nows=%time:~6,2%"
- (if "!nowh:~0,1!" == "0" Set nowh=!nowh:~1!)&(if "!nowm:~0,1!" == "0" Set nowm=!nowm:~1!)&(if "!nows:~0,1!" == "0" Set nows=!nows:~1!)
- echo __________________&Call :EchoX "9f:: 当前时间:"&echo !nowh!时!nowm!分!nows!秒
- if !hour! lss !nowh! Set /a h=24-!nowh!+!hour!
- if !hour! geq !nowh! Set /a h=!hour!-!nowh!
- Set /a m=!h!*60+(!minute!-!nowm!)
- if !minute! lss !nowm! Set /a h-=1
- if !h! == -1 Set h=23&Set /a m=24*60-(!nowm!-!minute!)
- Set /a s=!m!*60+(!second!-!nows!)
- if !second! lss !nows! Set /a m-=1
- if !m! == -1 Set h=23&Set /a m=24*60-1&Set /a s=24*60*60-(!nows!-!second!)
- Set sum=!s!&Set /a m=!m!%%60&Set /a s=!s!%%60
- if "%flag%" == "[+]" Set h=!hour!&Set m=!minute!&Set s=!second!&Set /a sum=(!h!*60+!m!)*60+!s!
- echo.&Call :EchoX "9f:: 关机时间:"&echo !hour!时!minute!分!second!秒%flag% (!sum!秒后)
- Call :EchoX " " "70::用时:" "xx.:!h!时!m!分!s!秒"
- Shutdown /a 1>nul 2>nul&Shutdown /s /t !sum! 1>nul 2>nul
- endlocal&Title 任意键退出&Pause >nul&Exit
- :ChkInput :: 检测输入
- Set "%1=!%1:"=!"
- if "!%1:~-1!" == "=" Set %1=0
- Set "%1=!%1: =!"
- if not defined %1 Set %1=0
- findstr /? 1>nul 2>nul||Goto ChkRange
- echo "!%1!"|findstr /i /v [^|^<^>^&A-z`~!@#$%%*()_+=\\\[\]{};:',./?^^-] 1>nul 2>nul||(Set /a err+=1&Goto %4)
- :ChkRange
- if /i !%1! lss %2 (Set /a err+=1&Goto %4)
- if "%flag%" neq "[+]" if /i !%1! gtr %3 (Set /a err+=1&Goto %4)
- Goto :eof
- :CDExit :: 标题栏倒计时退出 <%1=Sec|延迟秒数>
- Set n=%1
- :CDLoop
- Title %n%秒后退出&if %n% == 0 Exit
- if exist %WinDir%\System32\timeout.exe (timeout /t 1 >nul) else if exist %WinDir%\System32\choice.exe (choice /t 1 /d y /n >nul) else ping 127.1 -n 1 >nul
- Set /a n-=1&Goto CDLoop
- :EchoX :: 显示彩色文字 (不支持半角字符 \ / : * ? " < >|. % ! ~)。
- setlocal enabledelayedexpansion
- Set echox=EchoX.exe&&!echox! 1>nul 2>nul||(Set echox=&mkdir "%TEMP%\EchoX" 2>nul)
- for %%a in (%*) do (
- Set "param=%%a"&Set "param=!param:"=!"
- Set "color=!param:~0,2!"&(if not exist %WinDir%\System32\findstr.exe if not defined echox Set "color=xx")
- Set n=0&(if "!param:~2,2!" == "::" Set n=1)&(if "!param:~2,2!" == ".:" Set n=2)
- if !n! gtr 0 (
- if /i "!color!" == "xx" (Set /p="_!param:~4!"<nul) else (Set param=%%~nxa&if defined echox (!echox! -c !color! -n "!param:~4!") else (Pushd "%TEMP%\EchoX" 2>nul&>"!param:~4!",Set /p= <nul&findstr /a:!color! .* "!param:~4!*"&del "!param:~4!"&Popd))
- if !n! == 2 echo.
- ) else if defined param Set /p="_!param!"<nul
- )
- endlocal
- Goto :eof
复制代码
数字后如果跟+号,表示按输入延后多长时间关机
比如延后10分钟关机,则在输入分钟数:10+
验收1小时关机,则在输入小时数:1+
直接回车为默认0
|
评分
-
查看全部评分
|