我在下面使用這個腳本來跟蹤腳本每個部分的處理時間。當我在CMD提示符下運行它時,它完美地工作,但是當放入.bat時,它無法運行。這也是在兩個IF語句中構建的。 也對@driblio大喊,我從中得到這個。腳本在CMD中工作,但沒有批處理
@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%)
::Process
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.
由於您不在bat文件中顯示此代碼,我將猜測您將此代碼隱藏在FOR LOOP或IF構造中。如果是這樣,這將無法正常工作,因爲您的變量在LOAD時間擴展,而不是在RUN時間。您可以使用延遲擴展......但在這種情況下,將子程序從這些子程序中移出並從您的bat文件中調用它們會更容易。當然,你必須將開始時間的值傳遞給第二個子程序。發佈不完整的代碼幾乎總是會產生downvotes ...正如你可以看到已經發生的那樣。 – RGuggisberg
所以你說要在構造內設置一個開始時間和結束時間 – EddieT
否......除非你使用延遲擴展......我不建議......特別是如果你對它不熟悉的話...... 2子程序... 1開始和1結束使用您的代碼上面..發佈所有的代碼,如果你可以。 – RGuggisberg