[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理怎样自动记时关机?

本帖最后由 qwertl 于 2011-8-24 20:41 编辑

一开机自动记时45分钟后自动关机, 然后如果重开的话离上次关机没超过20分钟又会调用关机命令进行立即关机,可以帮实现下吗?控制下小孩用电脑

就是下次开机时要获取上次关机的时间做计算有点复杂

回复 7# asd821089612


批处理函数库里面有计算日期、星期、时间等
http://bbs.bathome.net/thread-3056-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 asd821089612 于 2011-8-24 07:14 编辑
  1. @echo off
  2. if not exist date.txt goto 1
  3. for /f "delims=&" %%i in (date.txt) do (
  4.     if %%i==%date% goto 3
  5. )
  6. goto 1
  7. :3
  8. if not exist shutdown.txt goto 1
  9. for /f "delims=:. tokens=1,2" %%i in (shutdown.txt) do (
  10.     set a=%%i
  11.     set b=%%j
  12. )
  13. for /f "delims=:. tokens=1,2" %%a in ('echo %time%') do (
  14.     set c=%%a
  15.     set d=%%b
  16. )
  17. set /a b+=20
  18. if %b% geq 60 (
  19.     set /a b-=60
  20.     set /a a+=1
  21. )
  22. if %a% gtr %c% goto 2
  23. if %c% equ %a% goto re
  24. goto 1
  25. :re
  26. if %b% gtr %d% goto 2
  27. goto 1
  28. :1
  29. @echo off
  30. echo %date%>date.txt
  31. for /f "delims=:. tokens=1,2" %%i in ('echo %time%') do (
  32.     set a=%%i
  33.     set b=%%j
  34. )
  35. set /a b+=45
  36. if %b% geq 60 (
  37.     set /a b-=60
  38.     set /a a+=1
  39. )
  40. at %a%:%b% shutdown -s -t 3
  41. echo %a%:%b%>shutdown.txt
  42. exit
  43. :2
  44. shutdown -s -t 3
复制代码
最后只要将这个批处理加进注册表开机启动就行了
代码很长 不够精简,有待改进,我是初学者,还在上初中,用简单的命令也只能做到这个程度了
我的代码的原理是这样的:先记录下当前时间,再将时间加上45分钟 (满六十进一位) 添加计划任务,在45分钟之后自动关机 并把那个时间记录进 shutdown.txt 这个文件中
第二次打开时,因为时间不能进行减法运算,所以我就先将上次记录在 shutdown.txt 中的时间加上个二十分钟 (和上面一样) 再比较加上的时间和当前时间(现比较时,再比较分),将会出现两种情况
1.如果当前时间大于计算后的时间,则已经过了20分钟,再跳转到第一次运行时的程序(添加计划任务、关机、记录时间)
2.如果当前时间小于计算后的时间,则说明未过20分钟,立刻关机
理论上代码有如下缺点 待修改
1.如果是23:00 到次日凌晨的话,可能不行
nothing's gonna change
and I've never changed

TOP

可以实现:
利用schtasks登陆执行一个bat文件。
该bat文件记下开机时间,并添加一项计划任务到45分钟后执行。
现在时间到将来时间的距离是45分钟,这个需要论坛的时间计算函数来实现。
利用schtasks的间隔时间参数也可以实现。
45分钟时间到后立即执行关机命令。并将关机时间计入bat。
因涉及开机后计算本次开机时间与上次开机时间的间隔距离,所以还需要在该bat的开头添加一项计算开机间隔时间的代码。
综上,只需利用一个schtasks命令来执行一项系统启动登陆计划运行一个bat,该bat记录下每次开关机参数,并计算开关机间隔时间,以及开机后45分钟的间隔时间。可能需要时间计算函数,论坛有现成的。所以,该功能很容易实现。不过我现在没空去写,留给新手挑战。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 3# qwertl

获取上次关机的时间不难~
问题是时间的减法~

TOP

楼上将的对!
echo %time% >>1.txt  放在脚本里就行了
然后开机的时候在检查是否已超过20分钟~
还有离上次关机没超过20分钟又会调用关机命令进行关机
是要等45分钟吗?还是直接关机?
关机命令(等45分钟):shutdown /s /t 2700
建议让脚本后台运行~

TOP

这个echo %time% >>1.txt  放在关机脚本里就行了

TOP

显示系统最后一次启动的时间~
可能帮得上忙~
  1. @echo for each os in getobject _ >bt.vbs
  2. @echo ("winmgmts:\\.\root\cimv2:win32_operatingsystem").instances_ >>bt.vbs
  3. @echo wscript.echo os.lastbootuptime:next >>bt.vbs & cscript //nologo bt.vbs & del bt.vbs
复制代码

TOP

返回列表