无忧启动论坛

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

[分享] 新手献丑--批处理获取电脑开机了多长时间

  [复制链接]
跳转到指定楼层
#
发表于 2024-3-13 10:00:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 likeyouli 于 2024-3-14 10:20 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims=:" %%i in ('time/t') do (
  4. set xian=%%i%%j & set xianshi=%%i & set xianfen=%%j
  5. for /f "skip=1 tokens=10,11 delims=-: " %%a in ('query user') do (
  6. set chu=%%a%%b & set chushi=%%a & set chufen=%%b
  7. )
  8. )
  9. rem endlocal
  10. set /a xianshi=1%xianshi%-100,xianfen=1%xianfen%-100
  11. for /f "skip=1 tokens=6,7,8 delims=- " %%u in ('query user') do (
  12. for /f "tokens=1,2,3 delims=- " %%r in ('date/t') do (
  13. SET DateA=%%u%%v%%w & set DateB=%%r%%s%%t
  14. echo !DateA! !dateb!
  15. )
  16. )
  17. call :DateToDays %DateA:~0,4% %DateA:~4,2% %DateA:~6,2% DaysX
  18. call :DateToDays %DateB:~0,4% %DateB:~4,2% %DateB:~6,2% DaysY
  19. if %DaysX% geq %DaysY% (set /a DayZ=DaysX-DaysY) else (set /a DayZ=DaysY-DaysX)
  20. echo %DateA%和%DateB%间隔的天数是:%DayZ%天
  21. if %xianshi% geq %chushi% (if %xianfen% geq %chufen% set /a fen=%xianfen%-%chufen% & set /a shi=%xianshi%-%chushi% )else (
  22. if %xianfen% geq %chufen% (set /a fen=xianfen-chufen,shi=24-chushi+xianshi-24) else (set /a fen=60+xianfen-chufen,shi=24-chushi+xianshi-24-1)
  23. )
  24. set /a zongshi=DayZ*24+shi
  25. echo 本次开机已%zongshi%小时%fen%分钟
  26. goto :eof

  27. :DateToDays %yy% %mm% %dd% days
  28. setlocal ENABLEEXTENSIONS
  29. set yy=%1&set mm=%2&set dd=%3
  30. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  31. set /a dd=100%dd%%%100,mm=100%mm%%%100
  32. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  33. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  34. endlocal&set %4=%j%&goto :EOF

复制代码
缩进什么的,不太规范,见谅,以前习惯用论坛l大师的显示硬件信息工具来获取电脑启动了多长时间。附件与上述代码完全一样,但有时候论坛引用代码的时候常丢字符、出一些奇怪问题。 见15楼,通用性更强。



电脑开机了多长时间.txt

1.45 KB, 下载次数: 30, 下载积分: 无忧币 -2

点评

PE 不能使用  发表于 2024-3-13 10:13
辛苦了  发表于 2024-3-13 10:04

评分

参与人数 1无忧币 +2 收起 理由
yyz2191958 + 2 辛苦了

查看全部评分

47#
发表于 2024-4-26 21:23:06 | 只看该作者
写的还是不错胡 在加点注释就更好了
回复

使用道具 举报

46#
发表于 2024-4-22 16:13:25 | 只看该作者
再加一句:您的开机速度超过了99%的电脑
回复

使用道具 举报

45#
发表于 2024-4-5 11:09:13 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

44#
发表于 2024-3-19 01:07:43 | 只看该作者
脚本后面对于变量chushi,chufen的引用,改为:!chushi!,!chufen! 可能更妥当些
回复

使用道具 举报

43#
 楼主| 发表于 2024-3-17 16:37:25 | 只看该作者
本帖最后由 likeyouli 于 2024-3-17 16:38 编辑

谢谢 ,15楼代码就是,,
我开始的时候不知道query user是外部命令,有的精简系统不能用,只是感觉query user速度比systeminfo更快
回复

使用道具 举报

42#
发表于 2024-3-17 16:23:30 | 只看该作者
用 systeminfo 也行的

点评

谢谢 ,15楼代码就是,, 我开始的时候不知道query user是外部命令,导致精简系统不能用,只是感觉query user速度比systeminfo更快  详情 回复 发表于 2024-3-17 16:37
回复

使用道具 举报

41#
发表于 2024-3-17 13:41:18 | 只看该作者
回复

使用道具 举报

40#
发表于 2024-3-15 22:23:29 | 只看该作者
感谢分享
回复

使用道具 举报

39#
发表于 2024-3-14 10:45:32 | 只看该作者
likeyouli 发表于 2024-3-14 10:42
这让我倒想起来一个问题,excel单元格中输入数字1,选中这个单元格,按ctrl+shift+3,会变成日期1900-1-1 ...

你感觉-2472633有什么意义么?去掉试试。
回复

使用道具 举报

38#
 楼主| 发表于 2024-3-14 10:42:33 | 只看该作者
szwp 发表于 2024-3-14 10:17
每一个问题都要考虑一个范围,如果包含公元前,那么8月可能没31天。公元后还得考虑10月也有不是31天的。
...

这让我倒想起来一个问题,excel单元格中输入数字1,选中这个单元格,按ctrl+shift+3,会变成日期1900-1-1,再按ctrl+shift+~ 又会变成1,,excel中1--2958465之间的任意一个数(包括小数,小数会显示时间),都对应一个日期,最大日期是9999-12-31,也就是2958465。
     我发的批处理中计算的最后一个变量j,就是通过一定算法将日期变成了数字,再相减得到相差的天数。

点评

你感觉-2472633有什么意义么?去掉试试。  详情 回复 发表于 2024-3-14 10:45
回复

使用道具 举报

37#
发表于 2024-3-14 10:17:59 | 只看该作者
likeyouli 发表于 2024-3-14 09:41
我感觉您涉猎范围真广、懂得可真多,,目测你得有50+以上的年龄了..

每一个问题都要考虑一个范围,如果包含公元前,那么8月可能没31天。公元后还得考虑10月也有不是31天的。
不确定上下限,算法就会复杂化,不适合初学者学习。

点评

这让我倒想起来一个问题,excel单元格中输入数字1,选中这个单元格,按ctrl+shift+3,会变成日期1900-1-1,再按ctrl+shift+~ 又会变成1,,excel中1--2958465之间的任意一个数(包括小数,小数会显示时间),都对应  详情 回复 发表于 2024-3-14 10:42
回复

使用道具 举报

36#
发表于 2024-3-14 09:59:07 | 只看该作者
感谢分享
回复

使用道具 举报

35#
发表于 2024-3-14 09:51:15 | 只看该作者
谢谢分享
回复

使用道具 举报

34#
 楼主| 发表于 2024-3-14 09:41:02 | 只看该作者
szwp 发表于 2024-3-14 09:30
具体得看题目要求的,如果只是9和09,可以用100+d-100解决,实际微软上世纪出过一个uptime.exe看启动时间 ...

我感觉您涉猎范围真广、懂得可真多,,目测你得有50+以上的年龄了..

点评

每一个问题都要考虑一个范围,如果包含公元前,那么8月可能没31天。公元后还得考虑10月也有不是31天的。 不确定上下限,算法就会复杂化,不适合初学者学习。  详情 回复 发表于 2024-3-14 10:17
回复

使用道具 举报

33#
发表于 2024-3-14 09:30:59 | 只看该作者
likeyouli 发表于 2024-3-14 09:12
我并没有否定您的意思,我知道这种格式情况下无论%%100,还是-100得出的结果都是一样的。                ...

具体得看题目要求的,如果只是9和09,可以用100+d-100解决,实际微软上世纪出过一个uptime.exe看启动时间的,效果如下has been up for: 0 day(s), 1 hour(s), 34 minute(s), 3 second(s)

点评

我感觉您涉猎范围真广、懂得可真多,,目测你得有50+以上的年龄了..  详情 回复 发表于 2024-3-14 09:41
回复

使用道具 举报

32#
 楼主| 发表于 2024-3-14 09:12:29 | 只看该作者
本帖最后由 likeyouli 于 2024-3-14 09:16 编辑
szwp 发表于 2024-3-13 15:54
输入日期已经有要求格式了,如果输入24111,是按照24.1.11还是24.11.1呢?

我并没有否定您的意思,我知道这种格式情况下无论%%100,还是-100得出的结果都是一样的。                                                                              ...............................................................................................................................................                                      
      忽又想到一种情况,一个变量dd,可能是9、09、009、119、0009、1119,假定最多4位数吧,要求把数字前边的0去掉,就可以写 set /a dd=100000%dd%%%100000,通过这步取余运算,就能很轻松的去掉0。
  感悟:取余运算(%%),我一直都没觉得有啥作用,小时候数学课看到整除不尽的算式,感觉还挺烦。现在终于明白取余有这么一个作用了。

点评

具体得看题目要求的,如果只是9和09,可以用100+d-100解决,实际微软上世纪出过一个uptime.exe看启动时间的,效果如下has been up for: 0 day(s), 1 hour(s), 34 minute(s), 3 second(s)  详情 回复 发表于 2024-3-14 09:30
回复

使用道具 举报

31#
发表于 2024-3-13 18:04:15 | 只看该作者
谢谢楼主,学习一下
回复

使用道具 举报

30#
发表于 2024-3-13 16:16:14 | 只看该作者
谢谢分享
回复

使用道具 举报

29#
 楼主| 发表于 2024-3-13 16:07:11 来自手机 | 只看该作者
szwp 发表于 2024-3-13 16:04
只是计算开机时间的话,百年之内不需要这么复杂的。

http://www.bathome.net/viewthread.php?tid=16147& ...

[尴尬][尴尬][尴尬]
回复

使用道具 举报

28#
发表于 2024-3-13 16:04:33 | 只看该作者
只是计算开机时间的话,百年之内不需要这么复杂的。

http://www.bathome.net/viewthrea ... p;extra=&page=1

点评

[尴尬][尴尬][尴尬]  详情 回复 发表于 2024-3-13 16:07
回复

使用道具 举报

27#
发表于 2024-3-13 15:54:18 | 只看该作者
likeyouli 发表于 2024-3-13 15:46
忽然想到关于取余的一个问题,一个变量dd,可能代表09,也可能代表9或19:(其实set /a 后变量可以直接使 ...

输入日期已经有要求格式了,如果输入24111,是按照24.1.11还是24.11.1呢?

点评

我并没有否定您的意思,我知道这种格式情况下无论%%100,还是-100得出的结果都是一样的。 忽又想到一种情况,一个变量dd,可能是9、09、009、119、0009、1119,假定最多4位数吧,要求把数字前边的0去掉,就可以  详情 回复 发表于 2024-3-14 09:12
回复

使用道具 举报

26#
 楼主| 发表于 2024-3-13 15:46:05 | 只看该作者
szwp 发表于 2024-3-13 11:04
wmic path Win32_PerfFormattedData_PerfOS_System Get SystemUptime
试试这个有没结果

忽然想到关于取余的一个问题,一个变量dd,可能代表09,也可能代表9或19:(其实set /a 后变量可以直接使用,不用百分号引出也行)
用set /a dd=100%dd%%%100,无论dd是9还是09,这里取余后都等于9;
用你昨天说的set /a dd=1%dd%-100,只有dd是两位数,即09或19、29的时候才能正确取到结果,如果dd为9的时候则不行。
结论:如果不清楚变量为一位数还是两位数的话,还是用set /a dd=100%dd%%%100取余,适用更广。

点评

输入日期已经有要求格式了,如果输入24111,是按照24.1.11还是24.11.1呢?  详情 回复 发表于 2024-3-13 15:54
回复

使用道具 举报

25#
发表于 2024-3-13 13:17:16 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

24#
发表于 2024-3-13 13:01:57 | 只看该作者
likeyouli 发表于 2024-3-13 13:00
刚才15楼的代码重新编辑了一下,麻烦你能否在pe下测试, 看看能否显示开机时间,,

谢谢
回复

使用道具 举报

23#
 楼主| 发表于 2024-3-13 13:00:35 | 只看该作者

刚才15楼的代码重新编辑了一下,麻烦你能否在pe下测试, 看看能否显示开机时间,,

点评

谢谢  详情 回复 发表于 2024-3-13 13:01
回复

使用道具 举报

22#
 楼主| 发表于 2024-3-13 12:54:41 | 只看该作者
zlq_hysy 发表于 2024-3-13 12:46
这个,运行结果是正常的,
初装时间是2023.12.26

刚才又编辑了下帖子,还是15楼,再试试
  刚才忘了把下边的query user 替换了  ,不好意思
回复

使用道具 举报

21#
发表于 2024-3-13 12:52:59 | 只看该作者
szwp 发表于 2024-3-13 11:04
wmic path Win32_PerfFormattedData_PerfOS_System Get SystemUptime
试试这个有没结果

谢谢

点评

刚才15楼的代码重新编辑了一下,麻烦你能否在pe下测试, 看看能否显示开机时间,,  详情 回复 发表于 2024-3-13 13:00
回复

使用道具 举报

20#
发表于 2024-3-13 12:46:13 | 只看该作者
likeyouli 发表于 2024-3-13 12:16
cmd下输入systeminfo,看看返回啥?告诉我一声。奇怪了,cmd内部命令也不行吗

这个,运行结果是正常的,
初装时间是2023.12.26

点评

刚才又编辑了下帖子,还是15楼,再试试 刚才忘了把下边的query user 替换了 ,不好意思  详情 回复 发表于 2024-3-13 12:54
回复

使用道具 举报

19#
发表于 2024-3-13 12:27:01 | 只看该作者
回复下载 感谢分享
回复

使用道具 举报

18#
发表于 2024-3-13 12:17:44 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 13:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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