Board logo

标题: [日期时间] 【已解决】BAT批处理提取系统时间的格式问题 [打印本页]

作者: jwt2014    时间: 2014-3-13 15:18     标题: 【已解决】BAT批处理提取系统时间的格式问题

本帖最后由 jwt2014 于 2014-3-16 00:01 编辑
  1. for /f "tokens=1,2 delims=:" %%i in ('time/t') do (
  2. set/a xiaos=%%i
  3. set/a fenz=%%j
  4. )
复制代码
使用上面的代码提取系统的小时和分钟,原本运行的结果如下:
xiaos=9
fenz=18
但今天提取的却是下面格式(同一台机器,同一个系统):
xiaos=09
fenz=18
由此带来后期计算的错误。

因为接触批处理不久,不知是哪里出了问题?特请教。
作者: sbjugt    时间: 2014-3-13 16:23

你日期是什么格式?你输出%time%看看
作者: Batcher    时间: 2014-3-13 16:24

  1. @echo off
  2. for /f "tokens=1,2 delims=:" %%i in ('time /t') do (
  3.     set xiaos=%%i
  4.     set fenz=%%j
  5. )
  6. set xiaos=10%xiaos: =%
  7. set fenz=10%fenz%
  8. set /a xiaos=xiaos%%100
  9. set /a fenz=fenz%%100
  10. echo %xiaos%
  11. echo %fenz%
  12. pause
复制代码

作者: jwt2014    时间: 2014-3-14 00:14

本帖最后由 jwt2014 于 2014-3-14 00:19 编辑

谢谢楼上的回复。尽管还没弄懂有些语句的意思,但运行了一下对于“09”格式处理的非常好。
不过,我再次经过各种测试,发现了一个规律:当系统时间的小时为5以下时,我的前述语句运行结果是第一种(xiaos=5),不影响后续计算,但当时间调到小时为6点以上,9点以下时,运行结果就是第二种(xiaos=06),这是为什么?印象中记得曾经有人解释过这里面涉及了批处理对数据的处理方式,但找了一下没找到,想请高手解释一下,谢谢!

补出错信息:   无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。
作者: jwt2014    时间: 2014-3-14 00:22

晕死,6:08出错,7 :11运行没有问题,9:15出错,似乎不完全上面规律。
作者: DAIC    时间: 2014-3-14 12:46

回复 5# jwt2014


    你的代码出错还是3楼的代码出错?
作者: jwt2014    时间: 2014-3-15 08:56

问题找到了。日期和时间的格式是03,09格式,如果进行数值计算或赋值时,因为是0开头,所以会被认为是八进制数值,当为08,09格式就需要进位,于是就出错了。而07以下不需要进位所以不会出错。
作者: terse    时间: 2014-3-15 09:59

回复 7# jwt2014
貌似3搂就是解决这个问题的 没试吗?
作者: PowerShell    时间: 2014-3-15 20:57

计算时间,powershell比bat强多了。
总的来说,powershell脚本即简单,比bat语法简单。又可靠。
因为不管什么数值,都要转换成【日期时间对象】。
只要转换时不错,计算是是不会错的,相信我。

具体用法,参见 拙作      http://www.bathome.net/thread-25932-1-3.html   powershell送你把,解决日期计算类问题的金钥匙!
作者: jwt2014    时间: 2014-3-16 00:00

回复 8# terse

当然试过,而且非常好用。主要是我想知道的是出错的原因,知道了原因,方法不是问题。




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