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

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

[复制链接]
 楼主| 发表于 2023-4-25 11:41:52 | 显示全部楼层
回复 15# Batcher 那不是变量,因为for /f只能处理文件,所以无奈生成了两个临时文件来存储变量供for /f使用,t1和t2是文件名,并没有错,不过借位这个确实没考虑到 ,输出的时间是负数是因为没有弄借位吗?那为什么第一个数字也就是小时 它已经没有可以借的了,为什么还是负数 要怎么做才能让它正常显示运行时间
 楼主| 发表于 2023-4-25 12:11:44 | 显示全部楼层
回复 15# Batcher那不是变量,因为for /f只能处理文件,无奈只好生成临时文件给for用,用完再删除,t1和t2都是文件名,而且也没弄错文件名,不过借位这一点我确实没考虑到,但是我也没什么思路实现借位,能提供一下借位的方法吗?谢谢
 楼主| 发表于 2023-4-25 17:11:20 | 显示全部楼层
回复 14# Batcher
echo后面的逗号是什么意思,有什么用?
发表于 2023-4-25 17:19:28 | 显示全部楼层
回复 18# LTSC1809


    防止命令出错
echo输出echo的模式
echo,输出空行
echo,balabala输出balabala
 楼主| 发表于 2023-4-25 17:43:32 | 显示全部楼层
回复 19# jyswjjgdwtdtj 这样啊,之前一直都是echo然后空格输入内容,原来还可以加逗号,涨知识了
发表于 2023-4-25 22:22:17 | 显示全部楼层
回复 16# LTSC1809


我说的是19-22这里不对:
for /f "delims=:.tokens=1" %%i in (t2.txt) do set t1h=%%i
for /f "delims=:.tokens=2" %%i in (t2.txt) do set t1m=%%i
for /f "delims=:.tokens=3" %%i in (t2.txt) do set t1s=%%i
for /f "delims=:.tokens=4" %%i in (t2.txt) do set t1ms=%%i
发表于 2023-4-25 22:33:29 | 显示全部楼层
回复 17# LTSC1809


因为for /f只能处理文件

你看到哪个教程上面这么说的?

可以考虑换个教程,例如:
http://bbs.bathome.net/thread-31727-1-1.html
 楼主| 发表于 2023-4-25 22:45:33 | 显示全部楼层
回复 22# Batcher 给变量加个引号就好了对吗,还有把变量名改了就能解决显示时间是负数的问题?
 楼主| 发表于 2023-4-25 22:53:15 | 显示全部楼层
回复 22# Batcher 改好了,请参阅
  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 t2h=%%i
  18. for /f "delims=:.tokens=2" %%i in ("%t2%") do set t2m=%%i
  19. for /f "delims=:.tokens=3" %%i in ("%t2%") do set t2s=%%i
  20. for /f "delims=:.tokens=4" %%i in ("%t2%") do set t2ms=%%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
复制代码
 楼主| 发表于 2023-4-25 22:54:47 | 显示全部楼层
自学的批处理果然还是不太好,今后望大家多多指教
发表于 2023-4-26 17:38:23 | 显示全部楼层
本帖最后由 mzzyb 于 2023-4-26 17:40 编辑

你可以直接提取当前系统的时间配合if函数判断,运算一下,就可以了,
提取时    %time:~0,2%
提取分    %time:~3,2%
下面是个简单的例子,希望帮到你
  1. set /p h=请输小时:
  2. set /p m=请输分钟:
  3. set /a nowh=%time:~0,2%
  4. set /a nowm=%time:~3,2%
  5. echo %nowh%
  6. echo %nowm%
  7. if %nowh% equ %h% (
  8. set /a "t=(%m%-%nowm%)*60"
  9. shutdown /s /t %t%
  10. ) else if %nowm% GTR %m% (
  11. set /a "t=(%h%-%nowh%-1)*3600+(60-%nowm%+%m%)*60"
  12. shutdown /s /t %t%
  13. ) else (set /a "t=(%h%-%nowh%)*3600+(%m%-%nowm%)*60"
  14. shutdown /s /t %t%
  15. )
复制代码
 楼主| 发表于 2023-4-26 17:41:25 | 显示全部楼层
回复 26# mzzyb 谢谢回复,但是time变量不是纯数字,有冒号点号,怎么运算啊
发表于 2023-4-26 18:00:32 | 显示全部楼层
回复 27# LTSC1809


    你试了那两个参数就知道,它是分别提取时,分为数字,可以用来计算的

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢回复 技术+1

查看全部评分

发表于 2023-4-26 18:47:25 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1-3delims=:." %%i in ("%time%") do set /a t1=%%i*3600+ (10%%j)%%100*60+10%%k%%100
  3. for /l %%i in (1,1,30000) do ver>nul
  4. for /f "tokens=1-3delims=:." %%i in ("%time%") do set /a t2=%%i*3600+ (10%%j)%%100*60+10%%k%%100
  5. set /at=t2 - t1
  6. echo;%t%
  7. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
LTSC1809 + 1 感谢回复 技术+1 技术+1 技术+1 技术+1 技术 ...

查看全部评分

发表于 2023-4-26 23:20:12 | 显示全部楼层
回复 25# LTSC1809


    咱们这个论坛里面懂批处理的基本上都是自学的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 01:04 , Processed in 0.021790 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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