Board logo

标题: [日期时间] 批处理BAT中怎样进行时间间隔的判断? [打印本页]

作者: strolley    时间: 2014-3-3 14:14     标题: 批处理BAT中怎样进行时间间隔的判断?

BAT内容如下:
  1. set XTHH=%time:~0,2%
  2. set XTMM=%time:~3,2%
  3. set JKSJ=%XTHH%%XTMM%
  4. if  %JKSJ% leq 0830 (
  5. echo 11111111111111
  6. ) else (
  7. if  %JKSJ% geq 1730 (
  8. echo 2222222222
  9. ) else (
  10. echo 333333333333333
  11. )
  12. )
复制代码
实现功能:JKSJ(0830<=JKSJ<=1730)时,输出333333,否则输出其它(111111或2222222222)。
               JKSJ小于等于0830时,输出111111111111,JKSJ大于等于1730时输出2222222222,否则输出3333333333

问题:监控时间为0510-0726时,显示的不对。。存在BUG。。。按理来说显示111111,现在却显示33333,是不是要经过什么特殊处理呢?请教各位前辈。。。
作者: Batcher    时间: 2014-3-3 14:20

  1. @echo off
  2. set XTHH=%time:~0,2%
  3. set XTMM=%time:~3,2%
  4. set JKSJ=%XTHH%%XTMM%
  5. if 1%JKSJ% leq 10830 (
  6.     echo 11111111111111
  7. ) else (
  8.     if  1%JKSJ% geq 11730 (
  9.         echo 2222222222
  10.     ) else (
  11.         echo 333333333333333
  12.     )
  13. )
  14. pause
复制代码

作者: strolley    时间: 2014-3-3 14:20

我重换了一个方法,可能也存在问题

@echo off
setlocal enabledelayedexpansion

set XTHH=%time:~0,2%
set XTMM=%time:~3,2%
set JKSJ=%XTHH%%XTMM%

set /a var1=510
set /a var2=1050

echo %XTHH%
set /a aa= %XTHH% * 60
echo %aa%

echo %XTMM%
set /a cc=%aa% + %XTMM%
echo %cc%

if  %cc% leq %var1% (
echo 11111111111111
) else (
if  %cc% geq %var2%  (
echo 2222222222
) else (
echo 333333333333333
)
)

pause
作者: Batcher    时间: 2014-3-3 15:56

为什么前面要加一个1呢?

0开头的数字会被BAT认为是八进制的数字,前面加个1可以避免此问题。
作者: strolley    时间: 2014-3-3 16:00

0开头的数字会被BAT认为是八进制的数字,前面加个1可以避免此问题。
Batcher 发表于 2014-3-3 15:56



    谢谢您,一下子就明白了。。。我后面重弄的那个方法,您看可以实现不?我简单测试了一下,还没有测到盲点,估计也存在BUG。。
作者: Batcher    时间: 2014-3-3 17:18

回复 5# strolley


不管可以还是不可以,都不建议使用。
一个月之后可能连你自己都记不清这个代码是什么意思了。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2