标题: [日期时间] 【已解决】BAT批处理提取系统时间的格式问题 [打印本页]
作者: jwt2014 时间: 2014-3-13 15:18 标题: 【已解决】BAT批处理提取系统时间的格式问题
本帖最后由 jwt2014 于 2014-3-16 00:01 编辑
- for /f "tokens=1,2 delims=:" %%i in ('time/t') do (
- set/a xiaos=%%i
- set/a fenz=%%j
- )
复制代码
使用上面的代码提取系统的小时和分钟,原本运行的结果如下:
xiaos=9
fenz=18
但今天提取的却是下面格式(同一台机器,同一个系统):
xiaos=09
fenz=18
由此带来后期计算的错误。
因为接触批处理不久,不知是哪里出了问题?特请教。
作者: sbjugt 时间: 2014-3-13 16:23
你日期是什么格式?你输出%time%看看
作者: Batcher 时间: 2014-3-13 16:24
- @echo off
- for /f "tokens=1,2 delims=:" %%i in ('time /t') do (
- set xiaos=%%i
- set fenz=%%j
- )
- set xiaos=10%xiaos: =%
- set fenz=10%fenz%
- set /a xiaos=xiaos%%100
- set /a fenz=fenz%%100
- echo %xiaos%
- echo %fenz%
- 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 |