我发现这个代码可爱的小珍闻这里:https://stackoverflow.com/a/5262637/2128987Windows命令行上计算给错误
@echo off
set starttime=%TIME%
set startcsec=%STARTTIME:~9,2%
set startsecs=%STARTTIME:~6,2%
set startmins=%STARTTIME:~3,2%
set starthour=%STARTTIME:~0,2%
set /a starttime=(%starthour%*60*60*100)+(%startmins%*60*100)+(%startsecs%*100)+(%startcsec%)
:TimeThis
robocopy /e /NFL /NDL /NJH /NJS /nc /ns /np folder%rndfolder% %drvltr%:\f%dirnew%\
set endtime=%time%
set endcsec=%endTIME:~9,2%
set endsecs=%endTIME:~6,2%
set endmins=%endTIME:~3,2%
set endhour=%endTIME:~0,2%
if %endhour% LSS %starthour% set /a endhour+=24
set /a endtime=(%endhour%*60*60*100)+(%endmins%*60*100)+(%endsecs%*100)+(%endcsec%)
set /a timetaken= (%endtime% - %starttime%)
set /a timetakens= %timetaken%/100
set timetaken=%timetakens%.%timetaken:~-2%
echo.
echo Took: %timetaken% sec.
由于它的伟大工程,一个独立的程序。我通常使用robocopy命令来确定写入文件需要多长时间。
我在其中添加一个额外的变量,因为我想保留原始秒为计算目的。所以我添加了额外的行集timeraw =%timetaken%:
set /a timetaken= (%endtime% - %starttime%)
***set timeraw=%timetaken%***
set /a timetakens= %timetaken%/100
set timetaken=%timetakens%.%timetaken:~-2%
我的批处理文件还使用SETLOCAL enabledelayedexpansion
好有时不正确地计算“开始时间”或“结束时间”。它保持它在08原时间:30:22.35类型格式和导致错误:
Invalid number. Numeric constants are either decimal (17),hexadecima (0x11), or octal (021)
很明显嘛,因为它包含非数字字符,如:角色。
我的批处理文件永远连续循环,因为我正在使用它来读取,写入,删除特定酷刑测试条件下的文件和文件夹。
任何想法为什么它会间歇性地不计算starttime或endtime变量?
编辑:
我做了一些改变,以我的整体的脚本。我不再需要enabledelayedexpansion,清理了一些if语句,并简化了一些代码。但是,我仍然偶尔会将起始时间或结束时间变量保留为HH:MM:SS.CS的原始时间格式,并导致计算出错。
任何人都知道为什么它会这样做? – HTWingNut 2013-03-26 21:54:38