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

[数值计算] 求助计算花费时间的批处理为什么变量一直显示为0?

我做了一个基准测试批处理,测试bat文件解释器的性能,但是最后输出花费的时间,总是输出0,代码如下:
  1. @echo off
  2. title 基准测试
  3. color 0a
  4. set /p number=Type_RunNumber:
  5. set t1=%time%
  6. set a=0
  7. :run
  8. set /a a=a+1
  9. if %a% gtr %number%=goto end_run
  10. goto run
  11. :end_run
  12. set t2=%time%
  13. set /a t3=t2-t1
  14. title 加法%a%次
  15. echo Run_Number:%number%  Run_Time:%t3%
  16. pause
复制代码
最后那个echo中有一个变量:%t3%,这个变量的值理论上应该就是运行花费的时间,这个值是怎么求出来的可以在代码里往前找一找,前面的%time%不是我自己定义的变量,在批处理中它的值就是当前的时间,现在的问题是,显示的运行时间永远是0,哪怕肉眼观察的运行时间有好几秒,求助

变量%time%不是纯数字呀

TOP

回复 2# idwma
我一开始就是这么弄得,还正常显示时间,但是刚刚就加了个标题和颜色,就这样了,我也很疑惑啊,那部分我什么也没动啊

TOP

那就不太清楚了,变量里有非数字确实是会变0的

TOP

今天评分超限了,技术分先欠着

TOP

回复 1# LTSC1809


系统变量%time%的值是 22:34:43.41 这种格式,里面有冒号和点。
你这样 set /a t3=t2-t1 直接做减法是错误的用法。

参考:批处理函数库里面有计算日期、星期、时间等实例
http://bbs.bathome.net/thread-3056-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# idwma
也就是说t1和t2被赋值了%time%的值,不能在set /a里面运算了是吗,那么,怎么得到程序运行时间呢?如有思路望解答,谢谢

TOP

本帖最后由 LTSC1809 于 2023-4-23 22:48 编辑

回复 6# Batcher
自学的批处理,才疏学浅,这几篇文章有很多看不懂,不过我好像有思路了,用for /f中的token,可以提取指定节的字符串,把每一节分开提取出来然后用for逐个做减法就好?我和vbs搞混了,vbs中有一个timer()函数,他和批处理的%time%功能一样,结果却可以直接运算,最近也做了个vbs的性能测试程序,用到了这一点,被误导了

TOP

回复 8# LTSC1809


把每一节分开提取出来然后用for逐个做减法就好?

可以,做好时分秒的转换就行了。
另外就是,注意跨天的情况,比如晚上11点59分执行到凌晨0点之后。

批处理计算时间差获取代码运行时间(兼容跨天)
http://bbs.bathome.net/thread-4701-1-1.html

批处理计算时间差
http://bbs.bathome.net/thread-3372-1-1.html

批处理调用PowerShell统计脚本执行时间
https://mp.weixin.qq.com/s/bgjZ0Gj3ZMkQn-EW0v2K0g
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher
谢了,跨天大概不用考虑,毕竟我应该也不会半夜运行

TOP

本帖最后由 LTSC1809 于 2023-4-24 19:20 编辑

求助,现在用我说的for提取出来每一个节,但是for /f语句只能处理文件怎么办,我唯一能想到的办法就是先生成两个临时文件分别存储变量t1和t2,做完for语句以后再删除,但是有没有不用生成临时文件的方法,现在的代码如下,运行时提示找不到文件,所以我才说要生成临时文件。现在的代码如下:
  1. @echo off
  2. title 基准测试
  3. color 0a
  4. set /p number=Type_RunNumber:
  5. set t1=%time%
  6. set a=0
  7. :run
  8. set /a a=a+1
  9. if %a% gtr %number%=goto end_run
  10. goto run
  11. :end_run
  12. set t2=%time%
  13. for /f "delims=:.tokens=1" %%i in (%t1%) do set t1h=%%i
  14. for /f "delims=:.tokens=2" %%i in (%t1%) do set t1m=%%i
  15. for /f "delims=:.tokens=3" %%i in (%t1%) do set t1s=%%i
  16. for /f "delims=:.tokens=4" %%i in (%t1%) do set t1ms=%%i
  17. for /f "delims=:.tokens=1" %%i in (%t2%) do set t1h=%%i
  18. for /f "delims=:.tokens=2" %%i in (%t2%) do set t1m=%%i
  19. for /f "delims=:.tokens=3" %%i in (%t2%) do set t1s=%%i
  20. for /f "delims=:.tokens=4" %%i in (%t2%) do set t1ms=%%i
  21. set /a t3h=t2h-t1h
  22. set /a t3m=t2m-t1m
  23. set /a t3s=t2s-t1s
  24. set /a t3ms=t2ms-t1ms
  25. title 加法%a%次
  26. echo Run_Number:%number%  Run_Time:%t3h%:%t3m%:%t3s%.%t3ms%
  27. pause
复制代码

TOP

还有,这是我生成临时文件的方法来处理的,这次能输出运行时间了,但是时间给我显示-9:-19:-19.-19什么鬼啊,代码如下:
  1. @echo off
  2. title 基准测试
  3. color 0a
  4. set /p number=Type_RunNumber:
  5. set t1=%time%
  6. set a=0
  7. :run
  8. set /a a=a+1
  9. if %a% gtr %number%=goto end_run
  10. goto run
  11. :end_run
  12. set t2=%time%
  13. echo %t1%>t1.txt
  14. echo %t2%>t2.txt
  15. for /f "delims=:.tokens=1" %%i in (t1.txt) do set t1h=%%i
  16. for /f "delims=:.tokens=2" %%i in (t1.txt) do set t1m=%%i
  17. for /f "delims=:.tokens=3" %%i in (t1.txt) do set t1s=%%i
  18. for /f "delims=:.tokens=4" %%i in (t1.txt) do set t1ms=%%i
  19. for /f "delims=:.tokens=1" %%i in (t2.txt) do set t1h=%%i
  20. for /f "delims=:.tokens=2" %%i in (t2.txt) do set t1m=%%i
  21. for /f "delims=:.tokens=3" %%i in (t2.txt) do set t1s=%%i
  22. for /f "delims=:.tokens=4" %%i in (t2.txt) do set t1ms=%%i
  23. del t1.txt
  24. del t2.txt
  25. set /a t3h=t2h-t1h
  26. set /a t3m=t2m-t1m
  27. set /a t3s=t2s-t1s
  28. set /a t3ms=t2ms-t1ms
  29. title 加法%a%次
  30. echo Run_Number:%number%  Run_Time:%t3h%:%t3m%:%t3s%.%t3ms%
  31. pause
复制代码

TOP

bat小白,请多指教!谢谢!

TOP

回复 11# LTSC1809


万里长征第一步:
  1. @echo off
  2. set "t1=%time%"
  3. echo,%t1%
  4. for /f "tokens=1-4 delims=:." %%a in ("%t1%") do (
  5.     set "Hh1=%%a"
  6.     set "Mi1=%%b"
  7.     set "Ss1=%%c"
  8.     set "Cs1=%%d"
  9. )
  10. echo,%Hh1%
  11. echo,%Mi1%
  12. echo,%Ss1%
  13. echo,%Cs1%
  14. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# LTSC1809


19行到22行的变量名应该是t2?不是t1?
25行到28行这样直接做减法是不对的,因为没有考虑小学减法的借位。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表