我發現這個代碼可愛的小珍聞這裏: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