无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6583|回复: 11
打印 上一主题 下一主题

批处理系列3:时间(终稿)

[复制链接]
跳转到指定楼层
1#
发表于 2021-7-2 10:10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 青青草 于 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
复制代码







2#
发表于 2021-7-2 11:02:05 | 只看该作者
虽然看不懂,但感觉很强大

点评

“开始”可在批处理开始时调用,“结束”在批处理结束时调用。 调用语句,如: call:mystartFunc  详情 回复 发表于 2021-7-5 11:45
回复

使用道具 举报

3#
 楼主| 发表于 2021-7-5 11:45:44 | 只看该作者
本帖最后由 青青草 于 2021-7-5 11:50 编辑
2011258258 发表于 2021-7-2 11:02
虽然看不懂,但感觉很强大
这是批处理模拟函数,放在批处理的最后。
mystartFunc在批处理中开始计时时调用,myendFunc在计时结束时调用。
调用语句,如: call:mystartFunc
回复

使用道具 举报

4#
发表于 2021-7-8 08:22:53 | 只看该作者
感谢分享 感谢分享
回复

使用道具 举报

5#
发表于 2021-7-18 20:32:48 | 只看该作者
批处理的代码也很长啊
回复

使用道具 举报

6#
 楼主| 发表于 2021-7-18 21:37:45 | 只看该作者
ganmianzhang 发表于 2021-7-8 08:22
感谢分享 感谢分享

回复

使用道具 举报

7#
 楼主| 发表于 2021-7-18 21:38:06 | 只看该作者
dx163 发表于 2021-7-18 20:32
批处理的代码也很长啊

回复

使用道具 举报

8#
发表于 2021-7-24 15:29:15 | 只看该作者
感谢分享 感谢分享
回复

使用道具 举报

9#
 楼主| 发表于 2021-7-25 10:24:02 | 只看该作者
ganmianzhang 发表于 2021-7-8 08:22
感谢分享 感谢分享

回复

使用道具 举报

10#
 楼主| 发表于 2021-7-25 10:24:46 | 只看该作者
dx163 发表于 2021-7-18 20:32
批处理的代码也很长啊

回复

使用道具 举报

11#
 楼主| 发表于 2021-7-25 17:43:25 | 只看该作者
nianyueriPE 发表于 2021-7-24 15:29
感谢分享 感谢分享

回复

使用道具 举报

12#
发表于 2021-7-26 19:11:28 | 只看该作者
感谢分享,可跨天计算。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 02:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表