找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20677|回复: 5

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

[复制链接]
发表于 2023-7-13 16:50:39 | 显示全部楼层 |阅读模式
本帖最后由 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. )
复制代码
麻烦大家帮我看下,如果你们电脑上执行没问题,那我再找找其他原因

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-7-13 17:39:33 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2023-7-14 10:00:02 | 显示全部楼层
回复 2# Batcher


    谢谢版主,不懂就问:第6和第22行 goto :20加:和不加:有什么区别?
认真看了下,你的代码只是简化了我的代码,我想知道,为什么我的在我机子上执行不出来~~
发表于 2023-7-14 10:05:56 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2023-7-14 10:41:20 | 显示全部楼层
回复 4# Batcher


    你的代码能执行成功,我只是想知道,为什么你那样写能执行成功,我那样写就不行,其中的原理是什么 ,或者说有没有参考网页,网址发我下,我自己去看,谢谢了
发表于 2023-7-14 10:42:55 | 显示全部楼层
回复 5# mzzyb


参考:批处理中的变量延迟扩展
http://bbs.bathome.net/thread-2899-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 19:35 , Processed in 0.019857 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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