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

随心笔谈9个月前更新 admin
210 00
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买

文章摘要

批处理脚本用于判断时间间隔,并输出相应的数值。脚本提取当前时间的小时和分钟,组合成一个变量 `JKSJ`,并根据 `JKSJ` 的值输出不同的数值。具体逻辑为: - 如果 `JKSJ` 小于等于 0830,输出 `11111111111111`;- 如果 `JKSJ` 大于等于 1730,输出 `2222222222`;- 否则输出 `333333333333333`。 然而,在监控时间段 2023 年 05 月 10 日至 07 月 26 日,脚本显示的结果与预期不符,显示的是 `333333333333333`,而非应显示的 `11111111111111`。用户认为这是由于缺少特殊处理导致的。 ### 问题分析 1. **时间提取部分**: - 脚本使用 `%time:~0,2%` 和 `%time:~3,2%` 来提取小时和分钟。 - 需要确认这些表达式是否正确提取了小时和分钟,并组合成 `JKSJ` 变量。 2. **条件判断部分**: - 条件判断是否正确,即 `1%JKSJ%` 是否正确判断 `JKSJ` 的值。 - 需要确保 `JKSJ` 的值在正确的时间段内会落入相应的条件分支。 3. **八进制问题**: - BAT 处理数字时,若数字以 `0` 开头,会将其视为八进制数。 - 脚本中使用 `1%JKSJ%` 来避免八进制问题,这可能是一个必要的处理。 ### 解决建议 1. **检查时间提取部分**: - 确保 `%time:~0,2%` 和 `%time:~3,2%` 正确提取小时和分钟。 - 确认提取的变量类型为数字,避免字符串操作。 2. **验证 `JKSJ` 值**: - 确认在特定时间段内,`JKSJ` 的值是否正确。 - 例如,在 05:10 时,`JKSJ` 应为 0510,小于等于 10830,应输出 `11111111111111`。 3. **确保八进制问题处理**: - 确认在 `JKSJ` 前加 `1` 的处理是否正确,确保 BAT 将其视为十进制数。 4. **Debugging**: - 在脚本中添加输出语句,显示 `JKSJ` 的值,确认其是否正确。 - 检查是否有其他潜在的问题,如变量名错误或其他逻辑错误。 ### 总结 脚本的主要功能是根据当前时间判断并输出相应的数值。问题可能出在时间提取部分、条件判断部分或八进制处理上。通过检查这些部分,可以确定脚本是否正确工作,并在必要时进行调整。



批处理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可以避免此问题。

© 版权声明

相关文章