[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] 【已解决】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
由此带来后期计算的错误。

因为接触批处理不久,不知是哪里出了问题?特请教。

回复 8# terse

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

TOP

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

具体用法,参见 拙作      http://www.bathome.net/thread-25932-1-3.html   powershell送你把,解决日期计算类问题的金钥匙!
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 7# jwt2014
貌似3搂就是解决这个问题的 没试吗?

TOP

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

TOP

回复 5# jwt2014


    你的代码出错还是3楼的代码出错?

TOP

晕死,6:08出错,7 :11运行没有问题,9:15出错,似乎不完全上面规律。

TOP

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

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

补出错信息:   无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。

TOP

  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
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

你日期是什么格式?你输出%time%看看

TOP

返回列表