求批处理大牛(估计跟变量延迟有关)

功能是测量其它程序的运行时间,思路是两次时间相减(时,分,秒,十毫秒分开相减,再换算求和)
==========================
@echo off
setlocal EnableDelayedExpansion
for /l %%j in (1,1,10) do (
set N=100
set t1=!time!
set h1=!t1:~0,2!
set m1=!t1:~3,2!
set s1=!t1:~6,2!
set cs1=!t1:~9,2!

for /l %%i in (1,1,%N%) do %1.exe>>temp.txt
del temp.txt

set t2=!time!
set h2=!t2:~0,2!
set m2=!t2:~3,2!
set s2=!t2:~6,2!
set cs2=!t2:~9,2!

set /a t=((!h2!-!h1!)*60*60*100+(!m2!-!m1!)*60*100+(!s2!-!s1!)*100+(!cs2!-!cs1!))*10
echo The total time of %1 in the %N% times is !t! ms
)
============================================
如果去掉最外层的for循环,程序是对的。但是加了循环后,会出错,cmd提示如下:
D:\我的文档\Visual Studio 2010\Projects\STL_LIST\Debug>test1.bat NOR_LIST
此时不应有 *60*60*100+(!m2!-!m1!)*60*100+(!s2!-!s1!)*100+(!cs2!-!cs1!))*10。

推荐  (0) | 0人关注关注
1个答案
1 0
支持者: DjWong

上条回复有个地方忘记改了。然后贴子不知道有什么违规语句,这里就直接把要改的地方说出来吧。
for 循环中的 %N% 改成 !N!
计算t的语句改成:
set /a "t=( (h2-h1)*60*60*100 + (m2-m1)*60*100 + (s2-s1)*100 + (cs2-cs1) ) * 10"
或者对每个括号使用转义符,即 ^( , ^)
另外,如果不想显示%1.exe的输出信息,直接 %1.exe>>NUL 。

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区