我在这里找到了这个不错的小代码:https ://stackoverflow.com/a/5262637/2128987
@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 命令一起使用来确定写入文件需要多长时间。
我在其中添加了一个额外的变量,因为我想保留原始秒数以用于计算目的。所以我添加了额外的行 set 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 变量吗?
编辑:
我对我的整体脚本进行了一些更改。我不再需要 enableelayedexpansion,清理了一些 if then 语句,并稍微简化了代码。但我仍然偶尔会在 starttime 或 endtime 变量保持为 HH:MM:SS.CS 的原始时间格式并导致计算错误的地方得到它。