1

我正在使用批处理脚本来测量命令的时间。我在 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)

似乎是错误的。

它是什么?

问候,大卫

4

1 回答 1

4

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

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

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

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

rem convert STARTTIME and ENDTIME to centiseconds

set STARTTIME=%STARTTIME: =0%

set ENDTIME=%ENDTIME: =0%

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


setif %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME%尝试测量天之间的时间时,还有两个可能会导致问题。

于 2013-02-04T02:02:34.247 回答