无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3661|回复: 18
打印 上一主题 下一主题

[原创] 定时关机:基于Shutdown命令,兼容PE&桌面系统。

  [复制链接]
跳转到指定楼层
1#
发表于 2023-9-14 17:30:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  1. @echo off
  2. if /i "%UserName%" == "SYSTEM" (Goto GotAdmin) else (reg query "HKLM\SYSTEM\ControlSet001\Control\MiniNT" 1>nul 2>nul&&Goto GotAdmin)
  3. 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

  4. :GotAdmin
  5. Title 定时关机&Color 2f
  6. MODE 1>nul 2>nul&&MODE con: Cols=37 Lines=13
  7. if not exist "%WinDir%\System32\shutdown.exe" if not exist "shutdown.exe" Call :EchoX "cf::找不到 Shutdown.exe 文件!"&Call :CDExit 5&Exit
  8. Call :EchoX "xx::基于" "2e::Shutdown" "xx.:命令,兼容PE&桌面系统。"&echo  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  9. echo.&Call :EchoX "        [ " "70::[A]" "xx.:  设置自动关机 ]"
  10. echo.&Call :EchoX "        [ " "70::[C]" "xx.:  取消自动关机 ]"
  11. echo.&echo __________________
  12. Call :EchoX "9f::选择选项"&Choice /c AC
  13. if '%ErrorLevel%' == '1' setlocal enabledelayedexpansion&Set err=0&Set flag=&Goto HInput
  14. if '%ErrorLevel%' == '2' Shutdown /a 1>nul 2>nul&Cls&Call :EchoX "cf.: 已取消自动关机!"&Call :CDExit 3&Exit

  15. :HInput
  16. Cls&if !err! gtr 0 Call :EchoX "cf:: 小时数输入无效,请重新输入!" "cf.:(メ!err!)"
  17. Call :EchoX "70:: 输入小时[0-23]:"&Set hour=&Set /p hour=
  18. echo "!hour!"|find "+"&&(Set "hour=!hour:+=!"&Set flag=[+])&(if "!hour:~0,1!" == "0" Set "hour=!hour:~1!")&Call :ChkInput hour 0 23 HInput
  19. Set err=0

  20. :MInput
  21. Cls&Call :EchoX "70:: 输入小时[0-23]:"&echo !hour!时%flag%
  22. if !err! gtr 0 (Call :EchoX "cf:: 分钟数输入无效,请重新输入!" "cf.:(メ!err!)") else echo.
  23. Call :EchoX "70:: 输入分钟[0-59]:"&Set minute=&Set /p minute=
  24. echo "!minute!"|find "+"&&(Set "minute=!minute:+=!"&Set flag=[+])&(if "!minute:~0,1!" == "0" Set "minute=!minute:~1!")&Call :ChkInput minute 0 59 MInput
  25. Set err=0

  26. :SInput
  27. Cls&Call :EchoX "70:: 输入小时[0-23]:"&echo !hour!时%flag%
  28. echo.&Call :EchoX "70:: 输入分钟[0-59]:"&echo !minute!分%flag%
  29. if !err! gtr 0 (Call :EchoX "cf:: 秒数输入无效,请重新输入!" "cf.:(メ!err!)") else echo.
  30. Call :EchoX "70:: 输入秒数[0-59]:"&Set second=&Set /p second=
  31. echo "!second!"|find "+"&&(Set "second=!second:+=!"&Set flag=[+])&(if "!second:~0,1!" == "0" Set "second=!second:~1!")&Call :ChkInput second 0 59 SInput

  32. :AutoOff
  33. Cls&Call :EchoX "70:: 输入小时[0-23]:"&echo !hour!时%flag%
  34. echo.&Call :EchoX "70:: 输入分钟[0-59]:"&echo !minute!分%flag%
  35. echo.&Call :EchoX "70:: 输入秒数[0-59]:"&echo !second!秒%flag%
  36. Set "nowh=%time:~0,2%"&Set "nowm=%time:~3,2%"&Set "nows=%time:~6,2%"
  37. (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!)
  38. echo __________________&Call :EchoX "9f:: 当前时间:"&echo !nowh!时!nowm!分!nows!秒
  39. if !hour! lss !nowh! Set /a h=24-!nowh!+!hour!
  40. if !hour! geq !nowh! Set /a h=!hour!-!nowh!
  41. Set /a m=!h!*60+(!minute!-!nowm!)
  42. if !minute! lss !nowm! Set /a h-=1
  43. if !h! == -1 Set h=23&Set /a m=24*60-(!nowm!-!minute!)
  44. Set /a s=!m!*60+(!second!-!nows!)
  45. if !second! lss !nows! Set /a m-=1
  46. if !m! == -1 Set h=23&Set /a m=24*60-1&Set /a s=24*60*60-(!nows!-!second!)
  47. Set sum=!s!&Set /a m=!m!%%60&Set /a s=!s!%%60
  48. if "%flag%" == "[+]" Set h=!hour!&Set m=!minute!&Set s=!second!&Set /a sum=(!h!*60+!m!)*60+!s!
  49. echo.&Call :EchoX "9f:: 关机时间:"&echo !hour!时!minute!分!second!秒%flag% (!sum!秒后)
  50. Call :EchoX "     " "70::用时:" "xx.:!h!时!m!分!s!秒"
  51. Shutdown /a 1>nul 2>nul&Shutdown /s /t !sum! 1>nul 2>nul
  52. endlocal&Title 任意键退出&Pause >nul&Exit

  53. :ChkInput :: 检测输入
  54. Set "%1=!%1:"=!"
  55. if "!%1:~-1!" == "=" Set %1=0
  56. Set "%1=!%1: =!"
  57. if not defined %1 Set %1=0
  58. findstr /? 1>nul 2>nul||Goto ChkRange
  59. echo "!%1!"|findstr /i /v [^|^<^>^&A-z`~!@#$%%*()_+=\\\[\]{};:',./?^^-] 1>nul 2>nul||(Set /a err+=1&Goto %4)
  60. :ChkRange
  61. if /i !%1! lss %2 (Set /a err+=1&Goto %4)
  62. if "%flag%" neq "[+]" if /i !%1! gtr %3 (Set /a err+=1&Goto %4)
  63. Goto :eof

  64. :CDExit :: 标题栏倒计时退出 <%1=Sec|延迟秒数>
  65. Set n=%1
  66. :CDLoop
  67. Title %n%秒后退出&if %n% == 0 Exit
  68. 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
  69. Set /a n-=1&Goto CDLoop

  70. :EchoX :: 显示彩色文字 (不支持半角字符 \ / : * ? " < >|. % ! ~)。
  71. setlocal enabledelayedexpansion
  72. Set echox=EchoX.exe&&!echox! 1>nul 2>nul||(Set echox=&mkdir "%TEMP%\EchoX" 2>nul)
  73. for %%a in (%*) do (
  74.     Set "param=%%a"&Set "param=!param:"=!"
  75.     Set "color=!param:~0,2!"&(if not exist %WinDir%\System32\findstr.exe if not defined echox Set "color=xx")
  76.     Set n=0&(if "!param:~2,2!" == "::" Set n=1)&(if "!param:~2,2!" == ".:" Set n=2)
  77.     if !n! gtr 0 (
  78.         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))
  79.         if !n! == 2 echo.
  80.     ) else if defined param Set /p="_!param!"<nul
  81. )
  82. endlocal
  83. Goto :eof
复制代码

数字后如果跟+号,表示按输入延后多长时间关机
比如延后10分钟关机,则在输入分钟数:10+
      验收1小时关机,则在输入小时数:1+
直接回车为默认0




评分

参与人数 1无忧币 +5 收起 理由
huyadong + 5 赞一个!

查看全部评分

2#
发表于 2023-9-14 17:59:56 | 只看该作者
好东西 谢谢
回复

使用道具 举报

3#
发表于 2023-9-14 18:07:26 | 只看该作者
唉!不错!!!
回复

使用道具 举报

4#
发表于 2023-9-14 19:23:11 | 只看该作者
好东西 谢谢
回复

使用道具 举报

5#
发表于 2023-9-14 19:42:19 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
发表于 2023-9-14 20:03:56 | 只看该作者

谢谢分享  学习一下
回复

使用道具 举报

7#
发表于 2023-9-14 20:14:46 | 只看该作者
谢谢分享  学习一下
回复

使用道具 举报

8#
发表于 2023-9-14 20:26:24 | 只看该作者
nice~!
回复

使用道具 举报

9#
发表于 2023-9-14 21:04:15 | 只看该作者
这批处理技术不错啊
回复

使用道具 举报

10#
发表于 2023-9-14 21:12:59 | 只看该作者
批处理达人
回复

使用道具 举报

11#
发表于 2023-9-15 08:18:26 | 只看该作者
谢谢分享
回复

使用道具 举报

12#
发表于 2023-9-16 23:59:50 | 只看该作者
感谢分享
回复

使用道具 举报

13#
发表于 2023-12-4 00:03:55 | 只看该作者
win10以管理员运行后闪下就退了
回复

使用道具 举报

14#
发表于 2023-12-4 00:08:55 | 只看该作者
学习一下
回复

使用道具 举报

15#
发表于 2024-1-21 21:50:35 | 只看该作者
Win11,闪了一下,不见了

点评

文本编码的问题,,不能用UTF-8保存,,要用ANSI  详情 回复 发表于 2024-1-21 22:21
回复

使用道具 举报

16#
 楼主| 发表于 2024-1-21 22:21:04 | 只看该作者
2012myjoys 发表于 2024-1-21 21:50
Win11,闪了一下,不见了

文本编码的问题,,不能用UTF-8保存,,要用ANSI
回复

使用道具 举报

17#
发表于 2024-1-22 13:25:31 | 只看该作者
BEIKING 发表于 2024-1-21 22:21
文本编码的问题,,不能用UTF-8保存,,要用ANSI

还真的是
回复

使用道具 举报

18#
发表于 2024-1-22 14:03:55 | 只看该作者
感谢分享
回复

使用道具 举报

19#
发表于 2024-1-22 15:46:15 | 只看该作者
直接回车?我试试看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-7-29 05:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表