无忧启动论坛

标题: 批处理系列3:时间(终稿) [打印本页]

作者: 青青草    时间: 2021-7-2 10:10
标题: 批处理系列3:时间(终稿)
本帖最后由 青青草 于 2021-7-25 20:17 编辑

       随着操作系统的不同,日期格式也可能不同:
如:
      星期日 2021-07-25
     2021-07-25 星期
     07/25/2021 Sun
     Sun 07/25/2021

      如果考虑到中、英之外的其它语言的操作系统,日期格式的种类实在太多了。因此,直接使用系统变量 %date% 进行字符串截取来获取系统日期的方法并不可取
      实际上日期格式是由注册表 HKEY_CURRENT_USER\Control Panel\International 里面 sShortDate 的值来决定的。

获取系统日期及时间:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3.   for /f "tokens=2 delims==" %%i in ('wmic path win32_operatingsystem get LocalDateTime /value ^| findstr "="') do (
  4.     set "strDate=%%i"
  5.      )
  6.      set/a y=%strDate:~0,4%,m=1%strDate:~4,2%%%100,d=1%strDate:~6,2%%%100,h=1%strDate:~8,2%%%100,f=1%strDate:~10,2%%%100,s=1%strDate:~12,2%%%100   
  7. echo !y!年!m!月!d!日 !h!时!f!分!s!秒
  8. pause
复制代码
      有些时候我们需要计算某些程序或任务执行完毕所耗费的时间,这就需要对时间进行计算。
开始时的时间:
  1. :mystartFunc
  2.     for /f "tokens=2 delims==" %%i in ('wmic path win32_operatingsystem get LocalDateTime /value ^| findstr "="') do (
  3.         set "strDate=%%i"
  4.      )
  5.      set/a y=%strDate:~0,4%,m=1%strDate:~4,2%%%100,d=1%strDate:~6,2%%%100,h=1%strDate:~8,2%%%100,f=1%strDate:~10,2%%%100,s=1%strDate:~12,2%%%100   
  6.     set/a m=(m+9)%%12,y-=m1/10,starttime1=(365*y+y/4-y/100+y/400+(m*153+2)/5+d-1),starttime2=h*3600+f*60+s
  7.     GOTO:EOF
复制代码


结束时的时间:
  1. :myendFunc
  2.       for /f "tokens=2 delims==" %%i in ('wmic path win32_operatingsystem get LocalDateTime /value ^| findstr "="') do (
  3.         set "strDate=%%i"
  4.        )
  5.      set /a y=%strDate:~0,4%,m=1%strDate:~4,2%%%100,d=1%strDate:~6,2%%%100,h=1%strDate:~8,2%%%100,f=1%strDate:~10,2%%%100,s=1%strDate:~12,2%%%100   
  6.     set /a m=(m+9)%%12,y-=m1/10,endtime1=(365*y+y/4-y/100+y/400+(m*153+2)/5+d-1),endtime2=h*3600+f*60+s
  7.       set /a timeca=(%endtime1%-%starttime1%)*86400+%endtime2%-%starttime2%
  8.       set /a hour=%timeca%/3600
  9.       set /a minute=%timeca%/60-%hour%*60
  10.       set /a second=%timeca%-%hour%*3600-%minute%*60
  11.       set  num=0
  12.         if %hour% EQU %num% (if %minute% EQU %num% echo 本次操作,用时:%second%秒)        
  13.         if %hour% EQU %num% (if %minute% NEQ %num% echo 本次操作,用时:%minute%分%second%秒 )
  14.         if %hour% NEQ %num%  echo 本次操作,用时:%hour%时%minute%分%second%秒
  15. GOTO:EOF
复制代码



调用方法:
  1. call:mystartFunc
复制代码








作者: 2011258258    时间: 2021-7-2 11:02
虽然看不懂,但感觉很强大
作者: 青青草    时间: 2021-7-5 11:45
本帖最后由 青青草 于 2021-7-5 11:50 编辑
2011258258 发表于 2021-7-2 11:02
虽然看不懂,但感觉很强大
这是批处理模拟函数,放在批处理的最后。
mystartFunc在批处理中开始计时时调用,myendFunc在计时结束时调用。
调用语句,如: call:mystartFunc
作者: ganmianzhang    时间: 2021-7-8 08:22
感谢分享 感谢分享
作者: dx163    时间: 2021-7-18 20:32
批处理的代码也很长啊
作者: 青青草    时间: 2021-7-18 21:37
ganmianzhang 发表于 2021-7-8 08:22
感谢分享 感谢分享


作者: 青青草    时间: 2021-7-18 21:38
dx163 发表于 2021-7-18 20:32
批处理的代码也很长啊


作者: nianyueriPE    时间: 2021-7-24 15:29
感谢分享 感谢分享
作者: 青青草    时间: 2021-7-25 10:24
ganmianzhang 发表于 2021-7-8 08:22
感谢分享 感谢分享


作者: 青青草    时间: 2021-7-25 10:24
dx163 发表于 2021-7-18 20:32
批处理的代码也很长啊


作者: 青青草    时间: 2021-7-25 17:43
nianyueriPE 发表于 2021-7-24 15:29
感谢分享 感谢分享


作者: 807979023    时间: 2021-7-26 19:11
感谢分享,可跨天计算。




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3