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

[系统相关] [已解决]求助批处理输入时间,到达指定时间关机

本帖最后由 mzzyb 于 2023-7-14 11:58 编辑

本人写了一个到了指定时间关机的脚本,一直执行不出来,第一次执行读取不到时间变量,循环第二次就行,每次它计算的时间总是误差2分钟,请各位给我把把脉,谢谢。
下面的bat代码
  1. cd /d %~dp0
  2. :20
  3. echo (1设置自动关机)(2取消自动关机)
  4. set /p g=请输入选项:
  5. if %g% equ 2 (
  6. shutdown /a
  7. goto 20
  8. )
  9. set /p h=请输小时:
  10. set /p m=请输分钟:
  11. set /a nowh=%time:~0,2%
  12. set /a nowm=%time:~3,2%
  13. echo %nowh%
  14. echo %nowm%
  15. if %nowh% equ %h% (
  16. set /a "t1=(%m%-%nowm%)*60"
  17. shutdown /s /t %t1%
  18. goto 20
  19. ) else if %nowm% GTR %m% (
  20. set /a "t2=(%h%-%nowh%-1)*3600+(60-%nowm%+%m%)*60"
  21. shutdown /s /t %t2%
  22. goto 20
  23. ) else (
  24. set /a "t3=(%h%-%nowh%)*3600+(%m%-%nowm%)*60"
  25. shutdown /s /t %t3%
  26. goto 20
  27. )
复制代码
麻烦大家帮我看下,如果你们电脑上执行没问题,那我再找找其他原因
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# mzzyb
  1. :20
  2. echo (1设置自动关机)(2取消自动关机)
  3. set /p g=请输入选项:
  4. if %g% equ 2 (
  5.     echo shutdown /a
  6.     goto :20
  7. )
  8. set /p h=请输小时:
  9. set /p m=请输分钟:
  10. set "nowh=%time:~0,2%"
  11. set "nowm=%time:~3,2%"
  12. echo %nowh%
  13. echo %nowm%
  14. if %nowh% equ %h% (
  15.     set /a "t=(m-nowm)*60"
  16. ) else if %nowm% gtr %m% (
  17.     set /a "t=(h-nowh-1)*3600+(60-nowm+m)*60"
  18. ) else (
  19.     set /a "t=(h-nowh)*3600+(m-nowm)*60"
  20. )
  21. echo shutdown /s /t %t%
  22. goto :20
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    谢谢版主,不懂就问:第6和第22行 goto :20加:和不加:有什么区别?
认真看了下,你的代码只是简化了我的代码,我想知道,为什么我的在我机子上执行不出来~~

TOP

回复 3# mzzyb


你的思路改成这样试试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :20
  4. echo (1设置自动关机)(2取消自动关机)
  5. set /p g=请输入选项:
  6. if %g% equ 2 (
  7.     echo shutdown /a
  8.     goto :20
  9. )
  10. set /p h=请输小时:
  11. set /p m=请输分钟:
  12. set "nowh=%time:~0,2%"
  13. set "nowm=%time:~3,2%"
  14. echo %nowh%
  15. echo %nowm%
  16. if %nowh% equ %h% (
  17.     set /a "t1=(m-nowm)*60"
  18.     echo shutdown /s /t !t1!
  19. ) else if %nowm% gtr %m% (
  20.     set /a "t2=(h-nowh-1)*3600+(60-nowm+m)*60"
  21.     echo shutdown /s /t !t2!
  22. ) else (
  23.     set /a "t3=(h-nowh)*3600+(m-nowm)*60"
  24.     echo shutdown /s /t !t3!
  25. )
  26. goto :20
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


    你的代码能执行成功,我只是想知道,为什么你那样写能执行成功,我那样写就不行,其中的原理是什么 ,或者说有没有参考网页,网址发我下,我自己去看,谢谢了

TOP

回复 5# mzzyb


参考:批处理中的变量延迟扩展
http://bbs.bathome.net/thread-2899-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

返回列表