Board logo

标题: [文本处理] [已解决]判断时间的批处理为什么会输出8秒9秒? [打印本页]

作者: lifei666    时间: 2021-4-18 19:35     标题: [已解决]判断时间的批处理为什么会输出8秒9秒?

本帖最后由 lifei666 于 2021-4-24 21:13 编辑
  1. :chonglai
  2. timeout 1 /NOBREAK
  3. for /f "tokens=1,2,3 delims=:." %%i in ("%time%") do (
  4.   set "tvar=%%i点%%j分%%k秒"
  5.   if %%~k GTR 4 goto chonglai
  6. )
  7. echo %time%>>12.txt
  8. goto chonglai
复制代码

作者: xp3000    时间: 2021-4-18 20:09

  1. @echo off
  2. title %date:~0,4%.%date:~5,2%.%date:~8,2%-%time:~0,2%点%time:~3,2%分%time:~6,2%秒
  3. :1
  4. ping -n 1 127.1 >nul
  5. %0
  6. goto :1
  7. pause
复制代码

作者: lifei666    时间: 2021-4-18 20:21

我的意思是只有前4秒 执行后面的Echo  可以是8秒和9秒也执行了  不知道什么原因
作者: xp3000    时间: 2021-4-18 20:27

这种框显示如果添加命令好像衔接不上,有命令也没用,pause也多余
作者: xp3000    时间: 2021-4-18 20:27

这种框显示如果添加命令好像衔接不上,有命令也没用,pause也多余
作者: lifei666    时间: 2021-4-18 20:29

什么就框显示了?你说的什么?
作者: lifei666    时间: 2021-4-18 21:01     标题: 只在每分钟前4秒执行后面的,为什么8秒和9秒也运行了~

  1. :chonglai
  2. timeout 1 /NOBREAK
  3. for /f "tokens=1,2,3 delims=:." %%i in ("%time%") do (
  4.    if %%~k GTR 4 goto chonglai
  5. )
  6. echo %time%>>12.txt
  7. goto chonglai
复制代码

作者: WHY    时间: 2021-4-18 21:21

  1. if 06 GTR 4 goto :a
复制代码
if条件为真,06会转换为数字6,其结果是数字6与数字4比较。
  1. if 09 GTR 4 goto :a
复制代码
if条件为假,09不能转成数字9(09会被当作非法的8进制),其结果是字符串09与字符串4比较。

正确姿势是加双引号进行字符串比较:
  1. if "%%k" GTR "04" goto :a
复制代码

作者: smss    时间: 2021-4-19 00:50

  1. LSS是小于if %%k LSS 4
  2. 你也可if 4 GTR %%k goto chonglai
复制代码

作者: lifei666    时间: 2021-4-19 14:54

if "%%k" GTR "04" goto :a
问题解决了
还是不明白为啥。if条件为假,09不能转成数字9
作者: Batcher    时间: 2021-4-19 15:52

回复 10# lifei666


截取日期、时间之后进行 set /a 计算时08和09会被看做非法八进制数字,参考:
http://bbs.bathome.net/thread-29062-1-1.html
http://bbs.bathome.net/thread-29253-1-1.html




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