bat截取日期、时间之后进行 set /a 计算时08和09会被看做非法八进制数字(截取最后一个字符串)原创

随心笔谈2年前发布 admin
213 0 0

文章摘要

文章介绍了在批处理 BAT 中通过设置变量和 if 语句来判断当前时间的间隔,并输出相应信息。文章内容如下: 1. 设置变量 `XTHH` 和 `XTMM` 分别提取小时和分钟: ``` set XTHH=%time:~0,2% set XTMM=%time:~3,2% ``` 2. 组合 `XTHH` 和 `XTMM` 形成 `JKSJ`: ``` set JKSJ=%XTHH%%XTMM% ``` 3. 根据 `JKSJ` 的值输出不同的信息: ``` if %JKSJ% leq 0830 ( echo 11111111111111 ) else ( if %JKSJ% geq 1730 ( echo 2222222222 ) else ( echo 333333333333333 ) ) ``` 4. 说明:由于 BAT 中的数字默认为十进制,文章提到在 if 语句中加 `1%` 可以避免八进制解读问题,例如: ``` if 1%JKSJ% leq 10830 ( ``` 文章最后提到,当监控时间为 `0510-0726` 时,显示结果不符合预期(显示333333,应为111111),并询问是否需要特殊处理。 总结:文章通过设置变量和 if 语句实现时间间隔判断,并解决了八进制解读的问题,但监控时间显示异常可能需要进一步验证或调整逻辑。



批处理BAT中怎样进行时间间隔的判断?

set XTHH=%time:~0,2%
set XTMM=%time:~3,2%
set JKSJ=%XTHH%%XTMM%
if %JKSJ% leq 0830 (
echo 11111111111111
) else (
if %JKSJ% geq 1730 (
echo 2222222222
) else (
echo 333333333333333
)
)

实现功能:JKSJ(0830<=JKSJ<=1730)时,输出333333,否则输出其它(111111或2222222222)。

JKSJ小于等于0830时,输出111111111111,JKSJ大于等于1730时输出2222222222,否则输出3333333333

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

@echo off
set XTHH=%time:~0,2%
set XTMM=%time:~3,2%
set JKSJ=%XTHH%%XTMM%
if 1%JKSJ% leq 10830 (
echo 11111111111111
) else (
if 1%JKSJ% geq 11730 (
echo 2222222222
) else (
echo 333333333333333
)
)
pause

说明

0开头的数字会被BAT认为是八进制的数字,前面加个1可以避免此问题。

© 版权声明

相关文章