时间测量的批处理脚本无法正常工作

时间:2013-02-04 01:19:07

标签: time batch-file measurement

我使用批处理脚本进行命令的时间测量。我在StackOverflow上找到了这个脚本。不幸的是,它有时不能正常工作,不幸的是我对批量编程知之甚少。我觉得它有时会起作用,有时却不起作用。也许我对此犯了错误,但似乎它在午夜之后无法正常工作。

剧本:

@echo off
setlocal

rem The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99
set STARTTIME=%TIME%

rem here begins the command you want to measure
dir /s > nul
rem here ends the command you want to measure

set ENDTIME=%TIME%

echo STARTTIME %STARTTIME%

rem convert STARTTIME and ENDTIME to centiseconds

set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

echo STARTTIME %STARTTIME%

echo ENDTIME %ENDTIME%

set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)

echo ENDTIME %ENDTIME%

rem calculating the duration is easy
set /A DURATION=%ENDTIME%-%STARTTIME%

rem we might have measured the time inbetween days
if %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME%

rem outputing

echo DURATION: %DURATION% in centiseconds

endlocal
goto :EOF

半小时前我正在使用它,我得到了这个结果:

STARTTIME  1:29:25.17 
STARTTIME  1:29:25.17 
ENDTIME  1:29:27.82 
ENDTIME  1:29:27.82 
DURATION: 1 in centiseconds

所以行

set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)

set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)

似乎错了。

这是什么?

此致 大卫

1 个答案:

答案 0 :(得分:3)

问题在于"%STARTTIME:~0,2%-100"" 1",还有一个额外的空间。然后,该程序会尝试查找(1 1)而不是(101)的值。

前面的额外1应仅适用于将时间输出为"01:29:25.17"的系统(给予101而不是01,系统将其解释为八进制数),但对于将时间输出为{{的系统1}}(注意1前面的空格)有一个问题(会给" 1:29:25.17")。

一种简单的方法就是删除1 1STARTTIME=(1%STARTTIME:~0,2%-100)*360000中的1,但这可能会导致其他系统出现问题。

更加防水的解决方案是在rem线之后添加两行:

ENDTIME=(1%ENDTIME:~0,2%-100)*360000

(编辑:Andriy M的上述方法更短)


rem convert STARTTIME and ENDTIME to centiseconds set STARTTIME=%STARTTIME: =0% set ENDTIME=%ENDTIME: =0% 中还有两个set,在尝试衡量天数之间的时间时可能会出现问题。